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

[Bascom] ATmega88PA - Odczyt RC5 nie działa, działa na ATmega8, co zmienić?

mazi937 05 Mar 2012 20:20 4642 32
  • #1 10638419
    mazi937
    Poziom 13  
    Witam!
    Mam mały problem z odczytem rc5 na atmega88pa. Program bez problemu działa na atmega8 ale już na atmega88pa nie działa. Kontroler jest nowy. Do odczytu używam tych samych odbiorników rc5 TSOP34836. Wyjście odbiornika podpięte bezpośrednio do portd.2, między GND a Vs jest kondensator 100u i Vs jest podpięte do +5V z rezystorem 220ohm. Proszę o wskazówki co może być nie tak Program :
    $regfile = "m88pdef.DAT"
    $crystal = 8000000
    
    Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = Portc.4 , E = Portc.0 , Rs = Portd.5
    Config Lcd = 16 * 2
    'Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.7 , Rs = Portb.0
    'Config Lcd = 16 * 2
    Cursor Off
    Cls
    Lcd "cos"
    Wait 2
    Config Pinc.5 = Output
    Reset Portc.5
    
    Config Int0 = Low Level
    
    Config Rc5 = Pind.2                                         'do Int0
    On Int0 Pobr_rc5
    Dim Address As Byte , Command As Byte
    Dim Odebr_kod As Bit
    
    Enable Interrupts
    Enable Int0
    
    
    
    Do
    
    Cls
    Lcd "Adres:" ; Address
    Lowerline
    Lcd "Komenda:" ; Command
    Waitms 100
    Loop
    End                                                         'end program
    
    
    
    Pobr_rc5:
    Set Portc.5
    Disable Int0
    Enable Interrupts
    Getrc5(address , Command)
    Command = Command And &B01111111
    
    
    Reset Portc.5
    
    Cls
    Enable Int0
    Return
  • #2 10642253
    cyberdar
    Poziom 31  
    Witam,

    Może pytanie zabrzmi głupio ale jakim programatorem programujesz ten uC ?
  • #3 10642351
    mazi937
    Poziom 13  
    Programuje przez USBasp
  • #4 10642401
    piotrva
    VIP Zasłużony dla elektroda
    1. Czy pilot to na 100% rc5?
    2. Czy próbowałeś wrzucić odczyt RC5 do pętli głównej?
    
    $regfile = "m644pdef.dat"
    '$regfile = "m32def.dat"
    '$regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 9600
    
    'konfiguracja pinu rc5:
    Config Rc5 = Pind.2 , Timer = 2
    'Config Rc5 = Pind.2
    Enable Interrupts
    Dim Address As Byte , Command As Byte , Togglebit As Byte
    Do
    Getrc5(address , Command)
    Togglebit = Command And &B10000000
    If Togglebit <> 0 Then Togglebit = 1
    'rozpoznajemy tzw. togglebit
    Command = Command And &B01111111
    If Address <> 255 Then
    Print "Address: " ; Address ; " Command: " ; Command ; " Togglebit: " ; Togglebit
    End If
    Loop
    End
    

    Czasem BASCOM nie radzi sobie z obsługą tego odczytu w przerwaniu, mimo że teoretycznie wszystko jest OK.
  • #5 10642402
    cyberdar
    Poziom 31  
    Witam ponownie,

    Ostatnio też miałem ten problem w pracy. Program skompilował się poprawnie ale nie dało sie zaprogramować ani z poziomu Bascoma ani Khazamy. Dopiero STK500 i AVR Studio załatwiły sprawę. Szukałem oczywiście wcześniej jakichś informacji na ten temat ale nic konkretnego nie udało mi się znaleźć. Przyszedł mi do głowy pomysł właśnie ze wspomnianym STK500. Niestety innego rozwiązania, póki co, nie znalazłem.

    --
    pozdrawiam.
  • #6 10642487
    mazi937
    Poziom 13  
    Cytat:
    1. Czy pilot to na 100% rc5?
    2. Czy próbowałeś wrzucić odczyt RC5 do pętli głównej?

    1. Pilot 100% pracuje w Rc5, tak to by nie działał na Atmega8
    2. W pętli głównej jest to samo

    Cytat:
    Ostatnio też miałem ten problem w pracy. Program skompilował się poprawnie ale nie dało sie zaprogramować ani z poziomu Bascoma ani Khazamy. Dopiero STK500 i AVR Studio załatwiły sprawę. Szukałem oczywiście wcześniej jakichś informacji na ten temat ale nic konkretnego nie udało mi się znaleźć. Przyszedł mi do głowy pomysł właśnie ze wspomnianym STK500. Niestety innego rozwiązania, póki co, nie znalazłem.

    Tylko właśnie nie posiadam STK500
  • #8 10642627
    mazi937
    Poziom 13  
    Na pewno
  • #9 10643539
    WOBI
    Poziom 19  
    Jakiej wersji kompilatora używasz?

    Get RC5 domyślnie używa timera0 a Atmega8 to nie to samo co Atmega88 i timery są inne, inne rejestry sterujace.

    Zobacz do noty np. Timer/Counter Control Register TCCR0 w ATMega8 steruje preskalerem a w ATMega88 TCCR0B Timer/Counter Control Register B, dwa różne rejestry inne adresy, różne też są flagi zdarzeń timerów

    spróbuj użyć timera2 zmien konfiguracje na:
    ale nie spodziewam się że będzie działać bo timer2 też jest inny w ATmega88.

    Kod: text
    Zaloguj się, aby zobaczyć kod

    lub

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Na ATmega88 trzeba bedzie napisać własny program do odbioru RC5 bo prawdopodobnie biblioteka RC5 Bascoma może nie radzi sobie z timerami Atmega88P, są one inne niż ATmega8 różnią się między tymi mikrokontrolerami znacznie i jeśli kompilator/biblioteka nie uwzględnia, to dlatego nie działa Get RC5.
  • #10 10644468
    daniel6662
    Poziom 21  
    A fusebit "CKDIV8" masz wyzerowany?
  • #11 10644812
    mazi937
    Poziom 13  
    Tak, jest wyzerowany

    Dodano po 3 [minuty]:

    Zmiana Timera też nie pomogła
  • #12 10646496
    piotrva
    VIP Zasłużony dla elektroda
    1. sprawdź taktowanie np. dając miganie diodą co 1s z wykorzystaniem polecenia wait
    2. czy testowałeś mój program po zmianie odpowiednich wartości (regfile i crystal)?
  • #13 10646793
    mazi937
    Poziom 13  
    Zauważyłem dopiero teraz że w ogóle jak daje w pętli głównej getrc5 to nawet żadne słowo nie chce mi się wyświetlić na lcd. Taktowanie jest na 100% dobre
  • #14 10647149
    WOBI
    Poziom 19  
    Ten pierwszy program nie może działać. Coś tu kręcisz. Wgrałem ten program na M8 i później na M88 i nie działa bo:
    Co to za kwiatek w podprogramie obsługi przerwania? CLS używasz w przerwaniu?!
    Zobacz: program w pętli głównej cały czas wykonuje CLS i LCD "Adres" i gdy nastąpi przerwanie w czasie wykonywania zapisu do LCD to w tym przerwaniu znowu wykonujesz CLS czyli operacje na wyświetlaczu, tamta operacja jest przerwana, wykonujesz nową i po powrocie jest kontynuacja tamtej przerwanej i .... program i wyświetlacz lecą w krzaki.

    Nie powiedziałeś jakiej wersji kompilatora używasz?

    Wgraj tego hexa i powiedz jak teraz działa bo mi działa, na wyświetlaczu LCD powinieneś mieć napis Mega88 RC5.
  • #15 10647254
    mazi937
    Poziom 13  
    Cytat:
    Ten pierwszy program nie może działać. Coś tu kręcisz. Wgrałem ten program na M8 i później na M88 i nie działa bo:
    Co to za kwiatek w podprogramie obsługi przerwania? CLS używasz w przerwaniu?

    Wiem że to jest źle ale bez cls to mi nawet nie działało to na atmega8.
    Cytat:
    Nie powiedziałeś jakiej wersji kompilatora używasz?

    Bascom 1.11.9.5
    Cytat:
    Wgraj tego hexa i powiedz jak teraz działa bo mi działa.

    Jest poprawa bo kontroler reaguje na pilot ale cały czas pokazuje adres 255 i komendę 127.

    Dodano po 5 [minuty]:

    Możesz tu wrzucić kod tego programu
  • #16 10647309
    WOBI
    Poziom 19  
    To znaczy że masz coś źle z zależnościami czasowymi, prawdopodobnie masz źle ustawione fuse bity i taktujesz procesor RC wewnętrznym lub bit DiV8 masz źle ustawiony. Na mojej płytce ten hex przy 8MHz kwarcu działa i czyta komendy. Jeśli nasz adres 255 i kom 127 to znaczy właśnie że Getrc5 działa, ale rozkazy nie są właściwie odczytywane, tak się dzieje jak zła jest częstotliwość taktowania mikrokontrolera. U mnie wszystko działa.
  • #17 10647370
    mazi937
    Poziom 13  
    A taktujesz wewnętrznym RC czy zewnętrznym?
    DiV8 jest dobrze ustawiony
  • #18 10647658
    WOBI
    Poziom 19  
    Do portuC.5 podłącz Leda przez rezystor 220ohm do +5v i zobacz jak miga.
    Powinna migac co 1 sekunde tzn 500ms nie świeci 500ms świeci.

    Napisz czy tak jest czy szybciej czy wolniej.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #19 10647687
    mazi937
    Poziom 13  
    Jest dokładnie tak jak mówisz
  • #21 10654838
    mazi937
    Poziom 13  
    Ten i ten wyżej co go tu wkleiłeś nie działają w ogóle, a reakcja jest tylko na ten hex RC5_mega88 z tym że cały czas adres=255 a komenda=127

    Dodano po 26 [minuty]:

    Sugerując się wypowiedzią kolegi cyberdar, wygrzebałem z szafki stary programator stk200 i co ciekawe jak zaprogramuje nim to wszystko działa bez problemu.
  • #22 10655036
    piotrva
    VIP Zasłużony dla elektroda
    A to ciekawe... Moje pytanie brzmi jak programator może mieć wpływ na pracę układu? czyżby źle wgrywał hex'a?
  • #23 10655150
    mazi937
    Poziom 13  
    Też mnie to ciekawi
  • #24 10655908
    WOBI
    Poziom 19  
    Na mojej płytce wszystkie programy działają. Odczytaj programatorem plik z procesora i porównaj z tym wygenerowanym przez kompilator to bedziesz wiedział czy programator źle wpisuje program.

    Spróbuj ten program tylko pokombinuj z watrością [ , Wait = 2500] tzn wprowadzaj wartości od 100 do 5000. Musi zadziałać. Dla kwarcu 8MHz i ATMega88

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #25 10656801
    mazi937
    Poziom 13  
    Ten program też nie działa, a jak odczytam flash z procesora to się całkowicie różni od pliku hex wygenerowanego z bascoma
  • #26 10657176
    WOBI
    Poziom 19  
    To masz już odpowiedź. Skoro plik odczytany różni się to znaczy że masz źle obsługiwany programator którym programujesz lub jest on uszkodzony. Wgrywaj STK200 jak tamten nie działa. Używasz Bascoma do obsługi tego programatora? Jeśli tak to zmniejsz częstotliwość na 8kHz w zakładce w menu Options/Programmer lub załóż zworke Slow SCK. Jeśli to nie pomoże, szukaj tematów o USBASP, zmień wsad w programatorze i sterowniki w windows.
    A wgrałeś te sterowniki do tego programatora? Tylko najnowszy wsad obsługuje Atmege88 Link
  • #27 10658570
    mazi937
    Poziom 13  
    Tak używam Bascoma. Zmiana częstotliwości i zworki nic nie dały. Sterowniki są najnowsze. Skoro kolega cyberdar miał taki sam problem to mało prawdopodobne by mój programator był uszkodzony.
  • #29 10660838
    mazi937
    Poziom 13  
    Tego nie jestem pewien
  • #30 10660959
    piotrva
    VIP Zasłużony dla elektroda
    No skoro Kolega ma stk200 to można spróbować wgrać nim najnowszy fw.
REKLAMA