Hallo Freunde !
Muss mal wieder mit 'ner Frage kommen, da ich sie mir nicht selber
beantworten kann.
Wohlgemerkt, ich habe nicht hier sinnlos drauf los geschrieben, ohne
mich vorher im Web auch hier im Forum zu belesen.
Vielleicht habe ich wieder den Fehler einen "Betriebsblinden" beim Code
schreiben.
Beim Lesen eines Datenbytes mit ACK bleibt das Programm hängen:
1 | /*====================================================================*/
|
2 | /* */
|
3 | /* Empfange Daten m ACK */
|
4 | /* TW_MR_DATA_ACK */
|
5 | /* */
|
6 | /*====================================================================*/
|
7 |
|
8 | uint8_t TWI_Read_Databyte_Ack(void)
|
9 | {
|
10 | TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA);
|
11 | while (!(TWCR & (1<<TWINT)));
|
12 | while((TWSR & 0xF8) != TW_MR_DATA_ACK); // Check ACK Fehler ??
|
13 | return TWDR;
|
14 | }
|
Wenn ich die zweite while Zeile auskommentiere geht das Programm weiter,
aber das soll ja nicht der Ausweg sein.
Ich habe den Gesamtcode auf meiner Homepage:
http://oderlachs.de/code/AVR/AVR_RTC_Test.html
Auch werden mir bei ser. Ausgabe die Brotpreise von Wildwest angezeigt.
Das gesamte "UART-Gedöse" musste ich verwenden, um eine serielle
Fehlerausgabe bei Bedarf zu haben.
Leider kann ich unter "Geany" (Linux) nicht eine extra uart.c/uart.h
einbinden, darum alles in eine einzige Datei geschrieben, aber ich hoffe
habe es gut kommentiert.
Vielleicht findet ja ein geübtes Augen den Teufelsfuß oder
Gedankenfehler im Code?
Gruss und Danke
Gerhard