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

bascom - atmega8 - podłączenie klawiatury do linii wyświetlacza.

Bielinka9 23 Paź 2011 23:16 3977 4
  • #1 10059341
    Bielinka9
    Poziom 12  
    Mam tak wykonany układ i muszę oprogramować ATMEGA8 pod takie rozwiązanie.
    Wyświetlacz 2x16 podłączony do portu B tego procesora ale pod te linie podłączono również klawiaturę (5 linii - 5 klawiszy zwieranych do masy przez rezystory 2k7). Jak to zrealizować w bascomie? Może jakiś przykład ktoś ma? Wyświetlacz konfigurowałem dyrektywą config lcd i config lcdpin, co wyklucza mi (chyba) użycie tych linii jako wejściowych?

    Program w sumie reaguje na przycisk ale po jego wciśnięciu wyświetla już głupoty.

    Fragment schematu:
    bascom - atmega8 - podłączenie klawiatury do linii wyświetlacza.

    Oraz początki kodu:

    $regfile = "m8def.DAT"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Bus , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    
    Config Adc = Single , Prescaler = Auto , Reference = Off    'odniesienie z wejscia AREF
    Start Adc
    
    [i]'Config Pinb.2 = Input                                          'klawisz S1
    'Config Pinb.3 = Input                                          'klawisz S2
    'Config Pinb.4 = Input                                          'klawisz S3
    'Config Pinb.5 = Input                                          'klawisz S4
    'Config Pinb.0 = Input                                          'klawisz S5[/i]
    
    Config Pinc.0 = Output                                         [i]'podswietlenie: 1 = ON[/i]
    
    Config Pinc.4 = Output                                         [i]'speaker[/i]
    Config Pinc.5 = Output                                         [i]'sterowanie przekaznikiem: 1 = ON
    [/i]
    Config Pind.0 = Output                                         [i]'ster tyryst pomocniczym boost[/i]
    Config Pind.1 = Output                                         [i]'ster tyryst glownym[/i]
    Config Pind.2 = Output                                        [i] 'ster przetwornica glowna: 0 = ON[/i]
    Config Pind.3 = Input                                         [i] 'alarm pradu pod int1, aktywny = 0[/i]
    Config Pind.4 = Input                                         [i] 'wlacznik pracy, aktywny = 0[/i]
    Config Pind.7 = Output                                        [i]' napiecie dla lcd, 1 = ON[/i]
    
    Lcd_on Alias Portd.7
    Led_on Alias Portc.0
    
    S1 Alias Pinb.2
    
    Set Lcd_on
    Set Led_on
    
    Cursor Off Noblink
    Cls
    Locate 1 , 2
    Lcd "WITAM"
    
    Do
    
       Debounce S1 , 0 , Pr1 , Sub
    
    Loop
    
    End
    
    Pr1:
       Cls
       Lcd "Nacisnieto S1"
    Return



    -------
    Taka mała obserwacja: w oryginalnym programie zaszytym w sprawnym fabrycznym procesorze, na tych portach oscyloskop pokazuje przebieg podobny do sygnału z pilota - bez przerwy. Wciśnięcie przycisku na badanej linii nie powoduje nawet zauważalnej zmiany (mam kiepski oscyloskop) - jednak układ reaguje na ten przycisk i robi to doskonale, bezbłędnie.
    Po założeniu procesora programowanego w bascomie przeze mnie, linia jest spokojna, stabilizuje się do stanu H po wysłaniu danych do lcd.
    Bardzo będę wdzięczny za pomoc, jak zrealizować transmisję w sposób podobny do oryginału.
  • Pomocny post
    #2 10059641
    daniel6662
    Poziom 21  
    Być może bascom'owe instrukcje obsługi lcd nie patrzą na kierunek w jakim działa port, tzn. w
    w funkcja "Config Lcdpin" ustawia wybrane porty jako wyjścia a pozostałe instrukcje obsługi lcd nie sprawdzają czy to się nie zmieniło. Spróbuj przed instrukcjami od lcd czyli przed obydwoma "cls" ręcznie przestawić wyprowadzenia uC jako wyjścia.
    Druga sprawa to taka że 2,7K przy przyciskach może być zbyt mało i jak masz wciśnięty przycisk to wymuszasz stan niski na danym wyprowadzeniu a uC może nie być wstanie podciągnąć go do "H"
    I od kiedy ATMEGA8 ma JTAG? chyba powinno tam pisać ISP:)
  • #3 10059992
    Bielinka9
    Poziom 12  
    tak, ISP, napisałem JTAG z rozpędu... ale chyba wiadomo i tak po co to złącze :)
    Z tego co widać na oscyloskopie co się dzieje na liniach E oraz D4-D7, oryginalny procesor wysyła dane cyklicznie do wyświetlacza a między kolejnymi wysłaniami linię robią się Input z podciągnięciem i wygląda na to, że wystacza te 2k7 żeby je wyzerować.
    Nie wiem czemu nie mogę tej teorii zobaczyć na oscyloskopie - widocznie odczyt trwa bardzo krótko.

    Czy wie ktoś czym się różni konfiguracja wyświetlacza w trybie Single i Bus?
    W książce, której używam jest to skrzętnie zlekceważone a w większości przykładów jest config lcd =single.... może tą opcją coś bym osiągnął??
  • Pomocny post
    #4 10060041
    Mundi1970
    Poziom 24  
    Mały przykład, ale bez wykorzystania funkcji Debounce. Przed odczytaniem stanu przycisku, zapamiętywany jest stan portu. Odpowiednie Piny są ustawione jako wejścia, następnie sprawdzane jest czy przyciski są wciśnięte. Stan przycisku jest zapamiętywany w zmiennej Tempkey, zostają przywrócone stare ustawienia portu.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #5 10282239
    Bielinka9
    Poziom 12  
    Metoda Mundi1970 w 100% mnie zadowoliła.
REKLAMA