Witam.
Potrzebuję odczytać kod RC5 z wyprowadzenia INT1 (PD3) Atmega8.
Tymczasem w znanym kursie Bascom jest napisane:
Powyższy tekst prawdopodobnie mija się jednak z prawdą (albo zdeaktualizował się wraz z kolejną wersją Bascom-a, albo też taka jest różnica między 8051 i AVR).
Tak mi się wydaje, ponieważ w helpie Zbigniewa Gibka 1.11.7.4 jest napisane:
Z powyższego wynika, że timera0 nie należy używać, gdyż wykorzystywany jest on w getrc5. Pewnie dlatego autor kursu zasugerował się tym timerem0 i napisał zacytowane już wcześniej: Bardzo ważna uwaga: polecenie GETRC5 jest "fabrycznie" przypisane do wejścia INT0 procesora i NIE MOŻE współpracować z jakimkolwiek innym wejściem, nawet jeżeli jest to wejście przerwania sprzętowego. Dekoder podczerwieni TFMS lub SFH MUSI być dołączony do nóżki procesora będącej wejściem przerwania INT0.
Jednak w bascomie występuje możliwość konfiguracji wejścia RC5. W helpie czytamy:
Czyli, jak sądzę, można odbiornik RC5 podłączyć do INT1 i skonfigurować: config rc5 = pind.3 i wszystko powinno działać. Przy czym należy pamiętać o tym by ostrożnie używać timera0 (bądź go nie używać).
Oczywiście można będzie tak zrobić, jeśli wejście INT0 oraz TIMER0 nie są ze sobą w jakiś znaczący sposób powiązane, i to powiązanie nie ma wpływu dla zadziałania getrc5 (nie jestem pewien jak jest w rzeczywistości).
Ale nawet gdyby był z tym kłopot, to przecież w konfiguracji można ustawić inny timer: config rc5 = pind.3, timer = 1. Wówczas kod rc5 napływający na INT1 będzie sczytywany przy użyciu TIMER1.
Nurtuje mnie jeszcze kwestia tcon.0 w kodzie z kursu:
Tzn. nie jestem pewien, czy Reset Tcon.0 prawidłowo zadziała przy Atmega8 (w 89c2051 rzeczywiście działało, bez tego układ nie reaguje na pilota).
Potrzebuję odczytać kod RC5 z wyprowadzenia INT1 (PD3) Atmega8.
Tymczasem w znanym kursie Bascom jest napisane:
Cytat:Bardzo ważna uwaga: polecenie GETRC5 jest "fabrycznie" przypisane do wejścia INT0 procesora i NIE MOŻE współpracować z jakimkolwiek innym wejściem, nawet jeżeli jest to wejście przerwania sprzętowego. Dekoder podczerwieni TFMS lub SFH MUSI być dołączony do nóżki procesora będącej wejściem przerwania INT0,
czyli w przypadku układu 2051 do pinu 6.
Powyższy tekst prawdopodobnie mija się jednak z prawdą (albo zdeaktualizował się wraz z kolejną wersją Bascom-a, albo też taka jest różnica między 8051 i AVR).
Tak mi się wydaje, ponieważ w helpie Zbigniewa Gibka 1.11.7.4 jest napisane:
Z powyższego wynika, że timera0 nie należy używać, gdyż wykorzystywany jest on w getrc5. Pewnie dlatego autor kursu zasugerował się tym timerem0 i napisał zacytowane już wcześniej: Bardzo ważna uwaga: polecenie GETRC5 jest "fabrycznie" przypisane do wejścia INT0 procesora i NIE MOŻE współpracować z jakimkolwiek innym wejściem, nawet jeżeli jest to wejście przerwania sprzętowego. Dekoder podczerwieni TFMS lub SFH MUSI być dołączony do nóżki procesora będącej wejściem przerwania INT0.
Jednak w bascomie występuje możliwość konfiguracji wejścia RC5. W helpie czytamy:
Czyli, jak sądzę, można odbiornik RC5 podłączyć do INT1 i skonfigurować: config rc5 = pind.3 i wszystko powinno działać. Przy czym należy pamiętać o tym by ostrożnie używać timera0 (bądź go nie używać).
Oczywiście można będzie tak zrobić, jeśli wejście INT0 oraz TIMER0 nie są ze sobą w jakiś znaczący sposób powiązane, i to powiązanie nie ma wpływu dla zadziałania getrc5 (nie jestem pewien jak jest w rzeczywistości).
Ale nawet gdyby był z tym kłopot, to przecież w konfiguracji można ustawić inny timer: config rc5 = pind.3, timer = 1. Wówczas kod rc5 napływający na INT1 będzie sczytywany przy użyciu TIMER1.
Nurtuje mnie jeszcze kwestia tcon.0 w kodzie z kursu:
Cytat:Dim Kod As Bit
Dim Command As Byte , Subaddress As Byte
Config Lcd = 16 * 1 ' lub Config Lcd = 16 * 1a
Reset Tcon.0
On Int0 Receiverc5
Enable Int0
Enable Interrupts
Cls
Lcd "Waiting for RC5"
Cursor Off
Do
If Kod = 1 Then
Disable Int0
Cls
Lcd "Com: " ; Command ; ",Adr: " ; Subaddress
Kod = 0
Enable Int0
End If
Loop
Receiverc5:
Getrc5(Subaddress , Command)
Kod = 1
Return
Tzn. nie jestem pewien, czy Reset Tcon.0 prawidłowo zadziała przy Atmega8 (w 89c2051 rzeczywiście działało, bez tego układ nie reaguje na pilota).
