logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom Atmega32+PCF8574+klawiatura Jak rozłożyć bajt?

janek1815 29 Mar 2011 11:09 1723 8
REKLAMA
  • #1 9336119
    janek1815
    Poziom 38  
    Brakło mi linii I/O postanowiłem więc dołączyć expander pcf8574 2szt do której mam podłączone 11 przycisków i 5 zworek (jumpry). W odpowiedzi otrzymuję z każdego z nich bajt. Jak rozłożyć go na 8 liczb (128,64,32,16,8,4,2,1) aby w prosty sposób wywoływać 8 podprogramów. ?
  • REKLAMA
  • REKLAMA
  • #3 9336124
    janek1815
    Poziom 38  
    Język to oczywiście Bascom
  • REKLAMA
  • REKLAMA
  • #5 9336315
    tomus2k
    Poziom 27  
    Kod: text
    Zaloguj się, aby zobaczyć kod


    i wszystko jasne .
    W dokumentacji do pcf masz który bit która noga.
    Pozdrawiam
  • #6 9337426
    janek1815
    Poziom 38  
    Chyba mi brakuje dzisiaj logicznego myślenia bo nic nie rozumiem. Ani z powyższego ani z pdf.
  • #7 9337757
    WaldekPrzybyłek
    Poziom 14  
    Mały przykład:

    
    Dim A As Byte                                               'tutaj 1 bajt z PCF
    Dim B As Byte                                               'a tutaj 2 bajt z PCF
    
    
    If A = &B10000000 Then
    'tutaj podprogram dla a=128
    End If
    If B = &B01000000 Then
    'tutaj podprogram dla b=64
    End If
    


    W ten sam sposób dla 32, 16 , 8, itd.

    Proponuję jednak help'a - jest tam wszystko pięknie opisane
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #8 9337794
    tadzik85
    Poziom 38  
    Kolego WaldekPrzybyłek zapomniałeś o maskowaniu.
  • #9 9337888
    janek1815
    Poziom 38  
    Ok czy można jeszcze jaśniej ? Tam gdzie jeden pcf obsługuje same przyciski to jakoś sobie poradzę. Tam jest przełącznik obrotowy więc wartości są stałe ale na drugim pcf ze zworkami i resztą przełącznika obrotowego + hebelkowy to już mam problem a wydawało mi się to takie proste...
    
    Do
    I2cstart                                                    
    I2csend 112 , 255          'pierwszy                      
    I2csend 120 , 255          'drugi                           
    I2creceive 121 , Pcf           
    If Pcf <= 255 Then                                      
    
    
    Cls                                                       
    Lcd Pcf                                                  
    Wait 1                                                     
    End If
    Loop  
    
    

    Wystarczy podzielić bajt i według tego będzie ok :
    
    If A = 128 Then
    'tutaj podprogram dla a=128
    End If
    If B = 64 Then
    'tutaj podprogram dla b=64
    End If 
    

    Tylko dalej nie wiem jak to zrobić

    Zamieniam wartość Byte na zapis binarny i teraz potrzebuję 8 podprogramów i powinno być dobrze. Tylko jak zrealizowac maskowanie? A może jest inny sposób.
    
    Cls
    Locate 1 , 1                                               
    Lcd Pcf
    Locate 2 , 2
    Lcd Bin(pcf)
    

    Rozwiązaniem jest kod kolegi kilka postów wyżej:
    
    Do
     Incr A
     If A.2 = 1 Then Print "aaaaa " ' jeśli bit 2 zmiennej byte A = 1 
     If A.2 = 0 Then Print "bbbbb "
    Loop
    
REKLAMA