Moin,
ich hab hier ein atmega32-16pu, der ein etwas seltsames Verhalten zeigt.
Ich betreibe den mit Minimalbeschaltung - also 16Mhz Quarz und
Widerstand an Reset - das Ganze auf nem Steckbrett. Meinen Code habe ich
während des Testens auf folgenden Zeilen zusammengekürzt.
1 | ISR(SIG_USART_RECV) {
|
2 | uint8_t c = UDR;
|
3 | }
|
4 |
|
5 | void initPcInterface(void) {
|
6 | // Enable transmitter, receiver, rx complete interrupt
|
7 | UBRRL = 0x33; //19,2k bps //0x19; // 38.4k bps
|
8 | UCSRB |= (1<<RXCIE) | (1<<RXEN) | (1<<TXEN);
|
9 | }
|
10 |
|
11 | void sendByteToPc(uint8_t byte) {
|
12 | while( !(UCSRA&(1<<UDRE)) );
|
13 | UDR = byte;
|
14 | }
|
15 |
|
16 | void sendDataToPc(uint8_t *data, uint8_t size) {
|
17 | uint8_t i;
|
18 | sendByteToPc(size);
|
19 | for(i=0;i<size;i++) {
|
20 | sendByteToPc(data[i]);
|
21 | }
|
22 | }
|
23 |
|
24 | int main(void) {
|
25 | initPcInterface();
|
26 | sei();
|
27 | uint8_t *s = (uint8_t*)"uart-test successful\n";
|
28 | sendDataToPc(s,strlen((char*)s));
|
29 | while(1) {
|
30 | // LOOP
|
31 | _delay_us(10);
|
32 | }
|
33 | return 0;
|
34 | }
|
Dennoch löst irgendwas beim Empfang von Daten in unregelmäßigen
Abständen einen Reset aus. Wenn ich nix an den µC senden, passiert auch
stundenlang nix. Schick ich aber Daten übers uart zum µC führt das Ding
irgendwann nen reset durch.
Spannungsversorgung und Spannung am Reset-Pin hab ich schon mitm Oszi
überprüft, da stimmt alles und bleibt auch stabil.
Meine Frage nun: Woran kann das liegen?
Ich sollte vielleicht noch erwähnen, dass der µC nicht neu ist sondern
noch bei mir in der Restekiste lag. Vielleicht hat der sich ja im Laufe
der Zeit nen Defekt eingefangen?!