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

[Atmega16][Bascom] Odbiór RC5 na INT0

karols 07 Paź 2008 22:38 3610 16
  • #1 5610218
    karols
    Poziom 10  
    Mam następujące problemy z Atmega16 pod Bascomem:

    1.Próbuję odbierać kod RC5 w przerwaniu Int0 i nie bardzo chce mi to działać - pokazują sie na wyświetlaczu jakieś dziwne znaki. Analogiczny program przetestowany na attiny2313 (z tym samym odbiornikiem) działa prawidłowo.
    2.Z kontrolerem współpracuje karta przekaźnikowa na I2C (na PCF8574). Ustawianie wyjść w odpowiednie stany działa prawidłowo - instrukcja I2CSEND. Jest problem z odczytem stanów -instrukcja I2CRECEIVE. Odczyt daje zawsze 0.

    Może ktoś z kolegów miał podobne problemy.

    Tytuł poprawiłem - regulamin p.11.1
    [zumek]
  • #2 5610285
    dawid512
    Poziom 32  
    Ad1. Pokaż schemat i program odbiornika.
    Ad2. Rezystory podciągające 4k7 są na liniach SDA i SCL prawda?
  • #3 5611116
    Konto nie istnieje
    Konto nie istnieje  
  • #4 5613717
    karols
    Poziom 10  
    Wymieniłem uC na inną sztukę i zwątpiłem.
    Odbiór kodów RC5 działa, ale za to przestała być obsługiwana klawiatura 4x4 (KBD). Powrót do pierwszego uC powoduje, że klawiatura działa a przestaje działać RC5.
    Mam napisane oddzielne programy do testowania.
    Sprawdziłem ustawienia Fuse Bits obu uC i jest tylko różnica w pozycjach Calibration0,1,2,3 ale nie mogę ich zmienić.
    Poniżej wartości tych parametrów dla moich uC

    Calibration0 C1 B5
    Calibration1 C0 B4
    Calibration2 BD AE
    Calibration3 BF AF
  • #5 5618049
    dawid512
    Poziom 32  
    Jak masz klawiaturę podłączoną do portu C to nie będzie działać. Powodem jest standardowo uruchomiony J-TAG. Spróbuj z inną końcówką wyzwalającą przerwanie.
  • #6 5618064
    john_t
    Poziom 29  
    dawid512 napisał:
    Jak masz klawiaturę podłączoną do portu C to nie będzie działać. Powodem jest standardowo uruchomiony J-TAG. Spróbuj z inną końcówką wyzwalającą przerwanie.

    Lub "odprogramuj" JTAG-a podczas programowania. Wtedy cały port "C" działa jak inne.
  • #7 5628185
    karols
    Poziom 10  
    Faktycznie dałem ciała z ta klawiaturą i portem C. Jak na spokojnie popatrzyłem na ustawienia to zobaczyłem że mam nie wyłączony JATAG - dzieki za podpowiedz.
    Nie mogę jednak zwalczyć odbioru RC5. Układ odbiornika taki jak w nocie aplikacyjnej od TSOP1736 podłączony do M16 - pilot RC5-BP6-PR.
    Ten sam program (wzorowany na tym z ksiazki Programowanie mikrokontrolerów AVR w języku BASCOM- zmieniony typ procesora, wyświetlacz) wraz z odbiornikiem i wspomnianym pilotem śmiga na ATTINY2313 a na M16 bunt na pokładzie.
  • #8 5628455
    mirley
    Poziom 17  
    Ja miałem kiedyś problem z odbiornikiem RC5 bo pin na ktorym jest podłączony układ TSOP1736 miałem ustawiony jako wyjście.

    Czy na początku programu napisałeś:

    
    Config Rc5 = Pinx.y
    Enable Interrupts
    


    bo zgaduje że do odczytu kodu RC5 używasz bascomowej komendy GetRC5(adres, komenda)?
  • #9 5628945
    dawid512
    Poziom 32  
    Jak masz ustawione INT0? Na Low level czy falling? Próbowałeś na innym pinie INT?
  • #10 5629212
    mirley
    Poziom 17  
    Nie używam przerwania zewnętrznego tylko dowolny inny pin. Schemat całego układu w ktorym to napewno działa znajdziesz http://mirley.firlej.org/pilot_komputerowy.

    Zastosowałem tam ATTINY2313 ale na innych ATMELACH też testowałem i nie było problemu. Porownaj sobie program z pod tego linka ze swoim i znajdziesz problem napewno.
  • #11 5629250
    dawid512
    Poziom 32  
    Tak tylko pętlę główną masz zajętą i nie wiele już zrobisz... A w przerwaniu to w przerwaniu ;)
  • #12 5638363
    karols
    Poziom 10  
    Próbowałem zmieniac wyprowadzenia (int0,int1) i ustawienia (Low level, falling) i nie przynosi to efektu. Zmieniłem pilot i dalej mam działajacy program na attiny2313 i nie działajacy na atmega16.
  • #13 5638624
    zumek
    Poziom 39  
    karols napisał:
    Próbowałem zmieniac wyprowadzenia (int0,int1) i ustawienia (Low level, falling) i nie przynosi to efektu. Zmieniłem pilot i dalej mam działajacy program na attiny2313 i nie działajacy na atmega16.



    To może wreszcie pokażesz kod , który działa na ATTiny , a na ATMega już nie :?:

    Piotrek
  • #14 5639490
    karols
    Poziom 10  
    Proszę bardzo, oto program działający na attiny2313
    
    $crystal = 8000000
    $regfile = "attiny2313.dat"
                                            '
    Config Lcd = 16 * 1
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0      
    
    Cursor Off
    Config Int1 = Low Level
    Config Rc5 = Pind.3
    On Int1 Pobr_rc5
    
    Dim Address As Byte
    Dim Address1 As Byte
    Dim Command As Byte
    Dim Command1 As Byte
    
    
    Enable Interrupts
    Enable Int1
    Address1 = 255
    Command1 = 255
    Cls
    Do
    
    Locate 1 , 1
    Lcd "K:" ; Command1 ; "        "
    
    Enable Int1
    
    Loop
    End
    
    Pobr_rc5:
     Disable Int1
     Enable Interrupts
     Getrc5(address , Command)
     Command = Command And &B01111111
       If Address < 255 Then
         Address1 = Address
          Command1 = Command
       End If
    Return
    

    Kod umieszczamy między znacznikami [code] - proszę o tym pamiętać w przyszłości.
    [zumek]
  • #15 5646978
    karols
    Poziom 10  
    Zamieszcony w poprzedniej wiadomości kod przekompilowałem ponownie na atmega16, zaprogramowałem procek i zmontowałem układ na płytce testowej (innej niz pierwotnie testowałem, ale układ jest analogiczny) i zadziałało, ale tu pojawił się nowy problem.
    Układ działa jak do płytki testowej jest podłączony poprzez programator STK200/300 komputer (nawet wyłączony, nawet wyłączony z sieci). Odłaczenie programatora od złacza ISP płytki testowej i załączenie zasilania powoduje, że program nie reaguje na sygnały z pilota lub czasami mruga na wyświetlaczu przypadkowymi znaczkami (analogiczny efekt daje pozostawienie podłączonego programatora z odłączonym od niego portem LPT).

    Jednymi słowy złośliwość przedmiotów martwych.
  • #16 5649687
    Xgrzyb
    Poziom 11  
    Może coś z resetem masz źle?
  • #17 5651601
    karols
    Poziom 10  
    Ja tez tak myslałem, gdyz obie płytki różniły się układem resetu. Ta docelowa ma DS1813, a ta na której program ruszył (jak podłaczony jest komp) ma końcówke reset podłączoną do +5V przez rezystor 10k.
    Postanowiłem najpierw rozgryść problem na płytce na której program rusza-właśnie zakończyłem eksperymenty z dokładaniem kondensatora do układu resetu - brak efektu. Coś mi przyszło do głowy aby zająć się zasilaniem - dodanie kondensatorów odsprzęgajacych - brak efektu.
    Podłączyłem płytkę testową do innego zasilacza (laboratoryjnego) i poczatkowo nie było efektu ale musiałem przełożyc wtyczkę od zasilacza w gniazdku sieciowym i zrobiłem to odwrotnie niż siedziała poprzednio i program ruszył a ja się zastanawiam dlaczego???

    W załączeniu link do strony na podstawie której wykonałem płytkę testową
    Link
REKLAMA