Hallo,
ich programmiere derzeit einen mega8 mit avrdude. Dabei hatte/habe ich
folgende Probleme:
(1)
Einmal kam es zum folgenden Phänomen:
1. Überspielen des Programms auf den AVR
2. AVR startete das Programm immer wieder nach ca. 0,5 Sekunden von
vorne, auch wenn der PC nicht verbunden war. Des Weiteren schaltete der
AVR ein an PD3 (INT1) angeschlossenes Relais immer wieder ein und aus.
3. Nochmaliges Überspielen des gleichen Programms
4. selber Fehler
5. Kappen der Versorgungsspannung des AVR
6. Wieder herstellen der Versorgungsspannung
7. Programm läuft ohne Probleme
--> Zum Programm: Das habe ich nicht mehr im Original, aber ich bin
SICHER, dass es da keine Fehler gab. Sonst hätte das Programm ja auch
nach Wiederherstellung der Versorgungsspannung nicht funktioniert.
(2)
Weder PD2 (INT0) noch PD3 (INT1) kann ich als Eingang / Ausgang
ansteuern. Ich will die Pins einfach ganz normal, ohne Interruptfunktion
ansprechen. Muss man da irgendein Register setzen, damit sie als normale
Pins funktionieren?
(3)
Ich verwende die UART Bibliothek von Peter Fleury. In dieser steht:
1 | #define UART0_TRANSMIT_INTERRUPT SIG_USART0_DATA
|
2 | #define UART0_RECEIVE_INTERRUPT SIG_USART0_RECV
|
3 | SIGNAL(UART0_TRANSMIT_INTERRUPT)
|
4 | {...}
|
5 | SIGNAL(UART0_RECEIVE_ITERRUPT)
|
6 | {...}
|
Ich wollte das mal zu ISR ändern, doch was steht dann in den Klammern?
Dazu gibt es ja die folgende Anleitung:
>SIGNAL durch ISR ersetzen
>Name des Interrupt-Vektors anpassen (SIG_* durch entsprechendes *_vect)
>Im Datenblatt wird der Vektor mit TIMER2 COMP bezeichnet. Die Bezeichnung in der
avr-libc entspricht dem Namen im Datenblatt, Leerzeichen werden durch Unterstriche
(_) ersetzt und ein _vect angehängt
Im Datenblatt steht:
USART, RXC | USART, Rx Complete
USART, TXC | USART, Tx Complete
Also müsste das dann ISR(USART,_RXC_vect) heißen?
Danke, cmf