bar graph

Başlatan onurinci, 24 Şubat 2017, 23:54:18

onurinci

hocam selam.

127 posizyonlu bir absolute  encoderim var 7 bitlik girişi portB'ye bağladım ,encoderin o andaki konumunu LCD'den izleyebiliyorum,buna bargraph çubuk eklemeye çalıştım beceremedim ,yardımlarınıza mazharım..

@ DEVICE PIC16F628A,INTRC_OSC_NOCLKOUT,WDT_OFF,MCLR_OFF,PWRT_ON,BOD_OFF,LVP_OFF,CPD_OFF,PROTECT_OFF
DEFINE OSC 4

TRISA= %00000000 : PORTA= 0
TRISB= %11111111 : PORTB= 0
CMCON= 7 : OPTION_REG.7= 0

DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 7
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 6
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

TRISA= %00000000 : PORTA= 0
TRISB= %01111111 : PORTB= 0

N VAR WORD
BAR       VAR BYTE
Value     VAR BYTE
LCDOUT  $FE,$40,$15,$15,$15,$15,$15,$15,$15,$00  ' Custom character definition

Start:

N.byte0= PORTB

     
      LCDOUT $FE,$2, "dec:",DEC N,"       "
'    PORTB= Value

      BAR= Value/8
      LCDOUT $FE,$C0,REP 0\BAR,REP 32\(16-BAR)
           
      GOTO Start

onurinci

Hocam hallettim
Value= N   yazmayı unutmuşum...

ete

iyi olmuş . Bir ara mesajını gördüm ama müsait değildim. Sonrada başka işlere dalınca unutmuşum.
Ete

onurinci

hocam sağolun sayenizde ,kısık ateşte pişiyoruz..

onurinci

hocam bu gün malzemeleri temin ettim bredborda kurdum ,gerçekten simulasyonda kusursuz çalışan program tamamen değişik bir tepki veriyordu.elbette bir yazılım kuralını ihlal etmiştim ama neyi ?..ekranda yazdığım programın 0 ila 127 göstermesi gerekiyordu,simulasyon bunu onaylıyordu ,oysa ekran 65280 gösteriyordu switchler ilede 65407'ye tırmanıyordu, biraz düşündüm 65280'ni değerden çıkarıp kestirme bir çözüm buldum,devrem tam istediğim gibi tıkır tıkır çalıştı,

fakat bu sayı nerden çıktı ?,isis bunu niye algılamadı ? sizin için değildir ama benim için bir gizem,bir ara incelerseniz sevinirim,aynı hatalardan kaçınırım...

@ DEVICE PIC16F628A,INTRC_OSC_NOCLKOUT,WDT_OFF,MCLR_OFF,PWRT_ON,BOD_OFF,LVP_OFF,CPD_OFF,PROTECT_OFF
DEFINE OSC 4

TRISA= %00000000 : PORTA= 0
TRISB= %01111111 : PORTB= 0                             
CMCON= 7 : OPTION_REG.7= 0 ' Comparator Disable ,PortB PullUp on

DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 7
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 6
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2


N VAR WORD
BAR       VAR BYTE
Value     VAR BYTE
LCDOUT  $FE,$40,$15,$15,$15,$15,$15,$15,$15,$00  ' Custom character definition

Start:

N.byte0= PORTB
  Value= N
 
'  LCDOUT $FE,$80,"RF ATT -",DEC N," dBm  "         ' Input value Show
   
  LCDOUT $FE,$80,"RF ATT -",DEC N-65280," dBm  "         ' Input value Show
 
'-------------------------------------------------------------------------------     
  IF Value= 0 THEN
      LCDOUT $FE,$C0," Attenuator Off "   :goto Start
ENDIF     
'-------------------------------------------------------------------------------     
IF Value= 127 THEN
      LCDOUT $FE,$C0," Attenuator Max "   :goto Start
ENDIF
'-------------------------------------------------------------------------------

      BAR= Value/8
      LCDOUT $FE,$C0,REP 0\BAR,REP 32\(16-BAR)
'-------------------------------------------------------------------------------           
      GOTO Start

ete

İsiste sorun gözükmemesine rağmen gerçekte değişkenlerin bazen rastgele değeralmasından kaynaklanan bir durum olsa gerek.
N.Byte0=BortB şeklindeki bir ifade PortB nin değerini word değişkeni olan N in low byte kısmına aktarır. Ancak N değişkeninin HighByte kısmında sıfırdan büyük bir değer var ise işte o zaman sorun başlar. Zira bir Byte değişkenini bir Word değişkenine eşitlemeye çalışıyorsun bu şekilde.
İşin doğrusu orada, Value=N  yazman yerine,
Value=N.byte0 şeklinde olmalı idi. Üstelik madem işin byte lar iile neden word değişkenide kullandın onu anlamadım.
Ete.



Powered by EzPortal