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

Obsługa enkodera EC11B15244 z Atmega 128 w BASCOM - problem z kierunkiem obrotu

MAREK MRK 13 Maj 2012 21:53 1823 6
REKLAMA
  • #1 10893485
    MAREK MRK
    Poziom 18  
    Posty: 570
    Pomógł: 5
    Ocena: 100
    Witam, po kilku godzinnych poszukiwaniach nie mogłem znaleźć odpowiedzi na mój problem. Mam płytkę (nie robioną przeze mnie) na której znajduje się atmega 128 i enkoder EC11B15244. Atmega taktowana 8MHz, a enkoder podpięty pod linię PD6 oraz PD7. Problem polega na tym że nie mogę obsłużyć tego enkodera, nigdzie nie znalazłem odpowiedzi. Jedynie co udało mi się zrobić to nie zależnie od tego w którą stronę przekręcę to wartość oscyluje 0-1. Proszę o pomoc.
  • REKLAMA
  • #2 10893520
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    Czy na płytce są sprzętowo wyeliminowane drgania styków ?
    A jak obsługujesz ten enkoder ? Masz jakiś przykładowy kod ?
  • REKLAMA
  • #3 10893695
    MAREK MRK
    Poziom 18  
    Posty: 570
    Pomógł: 5
    Ocena: 100
    Enkoder jest podpięty wprost do atmegi.
    Kody próbowałem różne oto jeden z nich:
    $regfile "m128def.dat"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portf.4 , Db5 = Porta.0 , Db6 = Porta.2 , Db7 = Porta.4 , E = Porta.6 , Rs = Portc.7
    Cursor Off
    
    Dim B As Byte
    Dim C As Integer
    
    Do
    B = Encoder(pind.6 , Pind.7 , L , P , 0)
    
    Loop
    End
    
    L:
     Decr C
    Initlcd
    Cls
    Cursor Off
    Locate 1 , 1
    Lcd C
    Return
    
    P:
    Incr C
    Initlcd
    Cls
    Cursor Off
    Locate 1 , 1
    Lcd C
    Return
  • REKLAMA
  • #4 10894256
    Mundi1970
    Poziom 24  
    Posty: 342
    Pomógł: 96
    Ocena: 133
    To może na początek wypadałoby zdefiniować odpowiednie piny jako wejście lub przynajmniej podciągnąć rezystory :).

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #5 10895802
    MAREK MRK
    Poziom 18  
    Posty: 570
    Pomógł: 5
    Ocena: 100
    Faktycznie mój błąd, banalny o którym zapomniałem, każdemu się zdarza. Zaczęło działać aby uzyskać lepsze efekty przy szybszych zmiana położenia enkodera zmieniłem program. Teraz problem jak "wcisnąć" CLS. Gdy np. "dojadę" do 10, a następnie cofam ostatnia cyfra zostaje. Nie mam pomysłu jak Zrobić CLS aby wyświetlacz nie mrugał ani nie było oczekiwania (gdyby wyło oczekiwanie np. waitmas, enkoder nie działał by tak płynnie). Oto co uzyskałem:
    $regfile "m128def.dat"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portf.4 , Db5 = Porta.0 , Db6 = Porta.2 , Db7 = Porta.4 , E = Porta.6 , Rs = Portc.7
    Cursor Off
    Cls
    
    Dim Tryb As Byte , Wynik As Integer , A As Integer
    
    Config Pind.6 = Input
    Config Pind.7 = Input
    
    Set Portd.6
    Set Portd.7
    
    En1 Alias Pind.7
    En2 Alias Pind.6
    
    Do
    Wynik = 0
    
    Select Case Tryb
    Case 0:
    If En1 = 1 And En2 = 1 Then Incr Tryb
    Case 1:
    If En1 = 1 And En2 = 0 Then
    Wynik = 1
    Incr Tryb
    End If
    If En1 = 0 And En2 = 1 Then
    Wynik = -1
    Incr Tryb
    End If
    Case 2:
    If En1 = 0 And En2 = 0 Then Incr Tryb
    Case 3:
    If En1 = 1 And En2 = 0 Then
    Wynik = -1
    Tryb = 0
    End If
    If En1 = 0 And En2 = 1 Then
    Wynik = 1
    Tryb = 0
    End If
    End Select
    
    A = A + Wynik
    Locate 1 , 1
    Lcd A
    
    Loop
    
    Return
  • REKLAMA
  • Pomocny post
    #6 10895998
    Mundi1970
    Poziom 24  
    Posty: 342
    Pomógł: 96
    Ocena: 133
    MAREK MRK napisał:
    Teraz problem jak "wcisnąć" CLS. Gdy np. "dojadę" do 10, a następnie cofam ostatnia cyfra zostaje.


    Wystarczy dodać spacje :)

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #7 10896016
    MAREK MRK
    Poziom 18  
    Posty: 570
    Pomógł: 5
    Ocena: 100
    Racja, banalne rozwiązanie na które nie wpadłem. Jeszcze raz dziękuję za pomoc. Wszystkie problemy rozwiązane.

Podsumowanie tematu

✨ Użytkownik miał problem z obsługą enkodera EC11B15244 podłączonego do mikrokontrolera Atmega 128, co skutkowało niemożnością poprawnego odczytu kierunku obrotu. Po kilku sugestiach dotyczących eliminacji drgań styków oraz poprawnej konfiguracji pinów, użytkownik zaktualizował kod, co pozwoliło na poprawne działanie enkodera. Dodatkowo, rozwiązano problem z wyświetlaniem na LCD poprzez dodanie spacji, co zapobiegło migotaniu ekranu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA