Forum: Mikrocontroller und Digitale Elektronik Atmega328P: USART sendet nur zwei Zeichen


von Uhu U. (uhu)


Lesenswert?

Ich hatte auf dem Steckbrett u.a. meine USART-Software auf einem 328P im 
DIL-Gehäuse getestet - dort lief alles.

Die putchar-Routine enhält in der Transmit-Warteschleife einen 
sleep_mode()-Aufruf, ich hatte den Sleepmode aber nirgends initialisiert 
- auf dem DIL-Controller lief es trotzdem.

Nun wollte ich die ganze Chose auf einem 328P im TQFP-Gehäuse laufen 
lassen und nichts ging mehr.

Ich habe dann mit einem kleinen Testprogramm und meiner USART-Lib per 
Logic Analyzer versucht, der Sache auf den Grund zu gehen. Dabei stellte 
sich heraus, dass genau die ersten zwei Zeichen gesendet werden und der 
Controller anschließend nicht mehr aus der Transmit-Warteschleife kommt.

Ursache war der sleep_mode()-Aufruf - also offensichtlich zwei 
verschiedene Controller-Versionen... Im Datenblatt habe ich auf die 
Schnelle keinen Hinweis dazu gefunden.

von Marc V. (Firma: Vescomp) (logarithmus)


Angehängte Dateien:

Lesenswert?

Uhu U. schrieb:
> Ursache war der sleep_mode()-Aufruf - also offensichtlich zwei
> verschiedene Controller-Versionen...

 Ja, sicher.
 27 Waffer oben links sind für DIP, die restlichen sind für TQFP
 vorgesehen.
 Der Unterschied ist mit blossem Auge zu sehen - ganz klar zwei
 verschiedene Controller-Versionen...

von Manfred (Gast)


Lesenswert?

Uhu U. schrieb:
> Nun wollte ich die ganze Chose auf einem 328P im TQFP-Gehäuse
> laufen lassen und nichts ging mehr.
Gehäuse sollte egal sein, in Deinem Aufbau sind weitere Unterschiede.

In der Arduino-Umgebung kommt "Serial.flush();", bevor man in den 
Sleepmode geht. Zum Test kannst Du mal einige Millisekunden Pause 
machen, bevor Du schlafen gehst.

von Uhu U. (uhu)


Lesenswert?

Manfred schrieb:
> In der Arduino-Umgebung kommt "Serial.flush();", bevor man in den
> Sleepmode geht.

Das macht keinen Sinn, wenn der Controller in den (passenden) Sleep-Mode 
gehen soll, wenn der USART noch arbeitet.

von Einer K. (Gast)


Lesenswert?

> ich hatte den Sleepmode aber nirgends initialisiert
Da steckte der Fehler.

Sorry, für das böse Wort: "Das war schlampige Arbeit."
Jetzt ist es behoben, und es läuft.

Gut!

Meine Sicht:
Bei eigener schlampiger Arbeit, darf man nicht andere für auftretende 
Fehler verantwortlich machen.Die Diskussion über vermeintliche 
Unterschiede sind da irrelevant.

Uhu U. schrieb:
> Im Datenblatt habe ich auf die
> Schnelle keinen Hinweis dazu gefunden.
Wozu auch....
Im Datenblatt, und in den Appnotes steht, wie man es richtig macht.
Wenn man davon abweicht, droht Fehlfunktion.
Also nein: Die Datenblattschreiber werden nicht alles aufzählen, was man 
alles falsch machen kann.

Der Tipp muss also lauten:
Machs richtig, dann tuts das auch.

von Uhu U. (uhu)


Lesenswert?

Arduino F. schrieb:
> Da steckte der Fehler.

Gut dass du mir das jetzt sagst - ich wäre da nie drauf gekommen.

Im Ernst: Ich habe diesen Thread nicht eröffnet, damit DU deinen Senf zu 
Dingen geben sollst, die eh klar sind, sondern um Leuten, die mit der 
Suchfunktion umgehen können, ggf. einen Hinweis zu geben, woran solche 
kuriose Verhaltensweisen liegen könnten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.