Forum: Mikrocontroller und Digitale Elektronik Atmega8 UART


von Bit (Gast)


Lesenswert?

Hallo,

ich möchte eine Kommunikation zwischen RS232 und einem Atmega8 
realisieren. Dazu benutze ich einen Max232.
Ein Loop-Back Test funktioniert. Daher gehe ich davon aus, dass ich bis 
zum Max232 alles richtig gemacht habe.

Ich versuche mit folgendem Code das vom Atmega8 gesendete Zeichen mit 
dem Terminal zu empfangen. Leider kommt dort nichts an, wenn ich die 
Stromversorgung zum Atmega8 einschalte.
1
 
2
$regfile = "M8def.dat"
3
$crystal = 1000000
4
$hwstack = 100
5
$swstack = 100
6
$framesize = 100
7
$baud = 2400
8
9
Do
10
11
Print "u"
12
13
Loop
14
15
End

Die Baudrate ist auch im Terminal auf 2400 eingestellt.


Hat jemand eine Idee woran es liegen könnte ?

MfG. Bit

von Bit (Gast)


Angehängte Dateien:

Lesenswert?

Der Aufbau entspricht der Schaltung im Anhang.

MfG. Bit

von Frank L. (franklink)


Lesenswert?


von Bit (Gast)


Lesenswert?

Die Baudrate wurde im Terminal und µC sowohl mit 4800 als auch mit 2400 
getestet. Leider ohne Erfolg.

Müsste ich nicht theoretisch, sobald der µC mit Strom versorgt wird, 
"u"s mit dem Terminal empfangen ?

Dies ist weder mit dem HyperTerminal von WinXP der Fall, noch mit dem 
Terminal-Emulator aus Bascom-AVR.


Hat noch jemand einen Tipp ?

Gruß

Bit

von Karl H. (kbuchegg)


Lesenswert?

Bit schrieb:
> Die Baudrate wurde im Terminal und µC sowohl mit 4800 als auch mit 2400
> getestet. Leider ohne Erfolg.
>
> Müsste ich nicht theoretisch, sobald der µC mit Strom versorgt wird,
> "u"s mit dem Terminal empfangen ?
>
> Dies ist weder mit dem HyperTerminal von WinXP der Fall, noch mit dem
> Terminal-Emulator aus Bascom-AVR.
>
>
> Hat noch jemand einen Tipp ?

Nimm eine LED mit einem 220 Ohm Vorwiderstand und teste mal ob auf dem 
Tx Pin vom µC was rauskommt. Bei 2400 Baud wirst du die LED noch 
Flackern sehen.

Dann verfolgst du das Signal vom µC zum MAX und auf der anderen Seite 
vom MAX zum Kabel.

Wenn da überall das Flackern da ist, dann kreuz mal probehalber das 
Kabel aus.

Selbst wenn die Baudrate nicht stimmt, müsstest du am PC was sehen.

von Karl H. (kbuchegg)


Lesenswert?

> Ein Loop-Back Test funktioniert. Daher gehe ich davon aus,
> dass ich bis zum Max232 alles richtig gemacht habe.

Was muss man sich darunter vorstellen?
Den Loopback Test machst du am sinnvollsten, indem du den µC aus seinem 
Sockel nimmst und direkt im Sockel eine Drahtbrücke bei den Tx und Rx 
Pins des µC einsteckst. Hast du das so gemacht?

von Bit (Gast)


Lesenswert?

Das mit der LED ist eine gute Idee, nur müsste ich -vom µC aus gesehen- 
nach dem Max232 nicht auf +-12V Pegel sein ? Direkt aus dem µC müsste 
ich das flackern aber sehen, stimmt.


Ich habe -vom PC aus gesehen- nach dem Max232 TX und RX miteinander 
verbunden (Pin 11,12). Dann vom PC ein Zeichen gesendet. Dieses Zeichen 
habe ich dann auch wieder empfangen.

MfG. Bit

von Bit (Gast)


Lesenswert?

Vom PC aus sehe ich das Blinken der LED, wenn ich ein Byte über den 
Max232 versende.

Hänge ich die LED an den TX des Atmega8, ist diese die ganze aus und ich 
sehe auch kein flackern. (Vom PC aus gesehen, nach dem MAX232, war die 
LED die ganze Zeit an, bis auf die kurze Zeit des flackerns)

Messe ich mit einem Multimeter die Spannung am TX Ausgang des µC, zeigt 
es mir 0,00V.


Ist mein µC defekt ?

MfG. Bit

von Bit (Gast)


Lesenswert?

Update:

Die LED am TX Ausgang des Atmega8 leuchtet jetzt, jedoch blinkt sie 
nicht.

Weder mit
1
 Do 
2
3
Print "Hallo"
4
5
Loop

noch mit

1
 Do 
2
3
Print 00000001
4
5
Loop


MfG. Bit

von Dietrich L. (dietrichl)


Lesenswert?

Bit schrieb:
> Der Aufbau entspricht der Schaltung im Anhang.

An V+ und  V- muss je 1 Kondensator gegen GND!

Gruß Dietrich

von GeraldB (Gast)


Lesenswert?

Bit schrieb:
> Der Aufbau entspricht der Schaltung im Anhang.

Wo hast du denn diese Schaltung her. Ich habe diese "Sparschaltung" noch 
nicht gesehen. Da fehlt wohl ein Kondensator. Der Kondensator C7 muß 
weg. Von den Anschlüssen V+(2) und V-(6) muß jeweils ein Kondensator 
gegen GND geschaltet werden.

Evtl. sind weiterhin auch noch die Werte der Kondensatoren falsch. Nur 
der MAX232A arbeitet mit 100nF Kondensatoren. Beim normalen MAX232 
müssen die vier Kondensatoren mindestens 1µF groß sein.

Im Programm mußt du auch noch die UART konfigurieren:
1
CONFIG COM1 = baud , synchrone=0|1 , parity=none|disabled|even|odd , stopbits=1|2 , databits=4|6|7|8|9 , clockpol=0|1

von Dietrich L. (dietrichl)


Lesenswert?

Dietrich L. schrieb:
> An V+ und  V- muss je 1 Kondensator gegen GND!
Wie ich gerade sehe: nach Datenblatt geht der Kondensator von V+ nicht 
nach GND, sondern nach +5V.

von GeraldB (Gast)


Lesenswert?

Dietrich L. schrieb:
> Dietrich L. schrieb:
>> An V+ und  V- muss je 1 Kondensator gegen GND!
> Wie ich gerade sehe: nach Datenblatt geht der Kondensator von V+ nicht
> nach GND, sondern nach +5V.
Das ist egal. Man kann ihn gegen GND oder +5V schalten.

von Dietrich L. (dietrichl)


Lesenswert?

GeraldB schrieb:
> Das ist egal. Man kann ihn gegen GND oder +5V schalten.
Gegen +5V spart man aber eine Menge Geld, da der Kondensator weniger 
Spannungsfestigkeit braucht ;-))

von Bit (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe die Kondensatoren jetzt auch an V+ und an V- eingebaut.

Nachdem ich den Teil mit "Config Com1 = 2400, "etc. hinzugefügt habe, 
kommt auch was in der Konsole an.

Doch das Ergebnis ist noch nicht so perfekt (siehe Foto).

Baudrate im Terminal und Code auf 2400, Crystal auf 1MHz.


Wer kann mir weiterhelfen ?


MfG. Bit

von spess53 (Gast)


Lesenswert?

Hi

>Crystal auf 1MHz.

Hoffentlich nicht der interne RC-Oszillator.

MfG Spess

von Bit (Gast)


Lesenswert?

So:
1
$regfile = "M8def.dat"
2
$crystal = 1000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6
$baud = 2400


MfG. Bit

von Logik Level Mosfet (Gast)


Lesenswert?

Bit schrieb:
> $crystal = 1000000

Du brauchst einen Baudratenquarz. Zumindest einen externen, da der 
interne zu ungenau ist.

von Bit (Gast)


Lesenswert?

Ich meine gelesen zu haben, dass eine UART-Kommunikation mit dem 
internen Quarz möglich ist (Atmega8).

Scheint dann ja leider nicht der Fall zu sein :(


MfG. Bit

von Paul Baumann (Gast)


Lesenswert?

Es ist kein Quarz drin, nur ein RC-Generator. Das kann funktionieren,
ist aber nicht stabil bei Temperaturänderungen. Mach einen Quarz dran
und Du hast eine Sorge weniger.

MfG Paul

von spess53 (Gast)


Lesenswert?

Hi

>Ich meine gelesen zu haben, dass eine UART-Kommunikation mit dem
>internen Quarz möglich ist (Atmega8).

Das ist kein Quarz. Wenn du jetzt keinen Quarz anschließen kannst, 
besteht nur die Möglichkeit mit dem OSCCAL-Register die Abweichung zu 
korrigieren. Also das Register auslesen und den Wert stückchenweise 
höher oder niedriger einstellen. Was hast du denn bei deinem Screenshot 
gesendet?

MfG Spess

von Bit (Gast)


Lesenswert?

Ich glaube ich schrieb:
1
 Print 0

bei
1
 Print "Hallo"
 kommt aber z.B. genauso wenig verwertbares heraus.

MfG. Bit

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.