Forum: Mikrocontroller und Digitale Elektronik UART bringt nur NULL-Zeichen


von Ithamar G. (antimon)


Lesenswert?

Hallo zusammen,

ich habe laut Tutorial die Asynchrone serielle Schnittstelle mit einem
AtMega16 und dem MAX232N aufgebaut, aber trotz aller Bemühungen spuckt
er mir nur das NULL Zeichen am angeschlossenen PC mit Hterm aus,
anstatt die Zeichen, die ich schicken möchte.

Getaktet ist der Mega mit 8 Mhz, die Baudrate sollte 9600 sein, das
gibt einen Registerwert von 51 für den Teiler - so konnte ich es
zumindest auch aus anderen Beiträgen rauslesen.

Initialisiert (in C) habe ich wie folgt:
1
UBRRH = (unsigned char) (UBRR_BAUD>>8);
2
UBRRL = (unsigned char) UBRR_BAUD;
3
4
/* Aktivieren von receiver und transmitter */
5
UCSRB = (1<<RXEN)|(1<<TXEN);
6
7
/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
8
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

Ein "a" wollte ich so senden:
1
while ( !( UCSRA & (1<<UDRE)));
2
UDR = 'a';

Sollte doch soweit stimmen oder?

Falls ja, könnte es an der Hardware liegen? Ich habe zwar 47uF Elkos
genommen, andere haben da nur 4,7uF verwendet, aber laut Beschreibungen
sollte das kein Problem darstellen - oder doch?
Muss ich bei der Pinbelegung evtl. aufpassen? Ich hab die aus dem
Tutorial verwendet - brauch ich dann ein Nullmodemkabel zum PC oder ein
"normales"?
Kann ich irgendwie messtechnisch überprüfen ob die Ladungspumpen und
folglich die Pegel stimmen? An einem Elko hatte ich -3V gegenüber
Masse, beim anderen 10V - das könnte stimmen oder?

Vielen Dank schon mal für alle Tips!

von Sven (Gast)


Lesenswert?

Nach dem Einlöten läuft der Atmel immer mit internem Oszillator.

Fusebits geändert für 8Mhz ?

von Ithamar G. (antimon)


Lesenswert?

Stimmt, sorry, das hatte ich vergessen zu erwähnen - die habe ich
geändert.

Ein Test-Blinker lief auch wesentlich schneller, aber 100%ig sicher bin
ich mir nicht, ob ich alles richtig "gefused" hab...

Die Standardeinstellungen von den Fusebits hab ich nur insofern
geändert, als dass ich CSEL0 getoggelt hab - den Rest habe ich nicht
geändert, ist das richtig so?

Im PonyProg sind folgende Checkboxen aktiv (also programmiert, bit=0):
JTAGEN, BOOTSZ1, BOOTSZ0, SUT0, CKSEL3-0
Nicht aktiv (bit=1, unprogrammiert) sind dagegen OCDEN, CKOPT, BOOTRST,
BODLEVEL, BODEN und SUT1

SUT1-0 sind ja meines Wissens nach lediglich für den Start zuständig,
die anderen Fusebits ausser den CKSEL's haben mit dem Takt nichts zu
tun, richtig?
Oder habe ich eventuell noch irgendwo was übersehen?

von Bjoern B. (tishima)


Lesenswert?

Moin!

Teste erstmal deine MAX232 Geschichte. Prozessor aus dem Sockel nehmen
und zwischen RX und TX ne Brücke am Sockel machen, dann mit HTerm ein
Paar zeichen senden. Wenn die Zeichen zurückkommen, ist schonmal deine
MAX232 Geschichte in Ordnung.

Gleiche Baudrate bei HTerm eingestellt ???

Ansonsten benutzt Du den Internen Takt oder hast du nen Quarz drann,
sind die Fusebits wirklich korrekt gesetzt ????

Das Programm mal mit Verify in den Controller schreiben, schauen ob es
wirklich ohne Fehler geschrieben wurde.

Die Fehlersuche bei der Inbetriebname wurde aber auch schin X-mal
beschrieben.

mfg,
Bjoern

von Ithamar G. (antimon)


Lesenswert?

Oh mann - war klar dass das wieder eine kleine aber verheerende Sache
war... die Versorgungspins vom Max232 waren nicht angeschlossen.
Dadurch, dass die Platine einen gewissen Umfang hat, habe ich auf die
"Selbverständlichkeiten" nicht mehr geachtet - mit fatalen Folgen...

Ich dachte erst an einen Kurzschluss bzw. Unterbrechung der
selbstgeätzten Platine, aber sowas...

Aber vielen Dank für Eure Tips dadurch bin ich erst draufgekommen,
sonst hätt ich mich vermutlich totgesucht...

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.