Forum: Mikrocontroller und Digitale Elektronik RS232 Mega8-Pc


von Zsolt (Gast)


Lesenswert?

Hallo, sitze schon seit einigen Tagen vor dem Pc! Ich versuche eine 
Kommunikation zwischen zwei uC herzustellen. Jedoch mit wenig Erfolg!
Habe von eurem Tutorial die beiden Testprogramme heruntergeladen und auf 
zwei Mega8 gebrennt:
Senden: 
http://www.mikrocontroller.net/sourcecode/tutorial/uart-mega8.asm
Empfangen: 
http://www.mikrocontroller.net/sourcecode/tutorial/uart-led.asm
Nun habe ich den sendenden Mega an den PC angeschlossen. Leider empfange 
ich nicht das was ich sollte("Test"), ich bekomme eine Folge von Hex 
Zahlen: F8 00 80 78 1E.
Das von mir verwendete Programm heißt Term.

Einstellungen: Baudrate 9600, Databits 8, Parity none, Stopbit 1 und 
handshaking none;

Würde mich sehr freuen wenn mir jemand weiterhelfen könnte!

Anbei das Bild meiner Schaltung!

Danke, mfG Zsolt

von Zsolt (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, habe das Bild vergessen!!

von Holger K. (krulli) Benutzerseite


Lesenswert?

Was für einen Quarz hast Du denn auf dem Olimex-Board? Ich sehe auch 
keine Kondensatoren am Quarz. Fusebits richtig gesetzt?

von F. K. (freddy436)


Lesenswert?

klemm mal direkt an den VCC vom MAX232 einen 100n Keramik Kondensator, 
daran lag es bei mir mit den Elkos war die Spannung offensichtlich nicht 
stabil genug.

Versuch auch mal ob du ein loopback zum laufen bekommst (TXD/RXD am µC 
direkt miteinander verbinden und am Computer irgendwas senden, wenn es 
zurück kommt weist du schon mal das der MAX232 nicht defekt ist.

von Zsolt (Gast)


Lesenswert?

Hi!

leider habe ich keine genaue ahnung vom quarz - mir wurde nur gesagt 
dass ich   diese board verwenden könne.. (wie auch im tutorial 
beschrieben)

habe auch einen neuen hexcode in TERM erhalten (hatte wohl zuvor ein 
falsches programm raufgebrannt) - dieser lautet: 00 78 1E 78 1E F8 78 FE 
80 78 00 0F 78 1E 00 3C F0 80 78 00 F0 78 FE 00   (nichts mit 'T' 'e' 
's' 't' '!' '10' '13' )

wie man im bild sieht, halte ich die batterie nur mit den fingern an die 
angelöteten kabel.. kann vielleicht ein prob sein?

was heisst dieser code?? lerne nix daraus :( auch wenn ich mir die ascii 
tables anschau

von Holger K. (krulli) Benutzerseite


Lesenswert?

Solange Du meine Fragen nicht beantworten kannst, kann ich Dir auch 
nicht weiterhelfen...

von Zsolt (Gast)


Lesenswert?

Entwicklungsplatine für alle 28-poligen AVR-Controller (AT90S4433, 
ATmega8, ATmega48)

Die Platine enthält einen Sockel für den Mikrocontroller, einen 8 
MHz-Quarz, einen Anschluss für den ISP-Programmer und einen 
RS232-Pegelwandler mit einer 9-poligen Sub-D-Buchse.


leider kann ich nicht mehr sagen :(
wenn du mir aber sagen kannst wo ich nachsehen sollte mache ich das 
natürlich sofort, danke für deine bemühung!

von Jadeclaw D. (jadeclaw)


Lesenswert?

@Zsolt: Häng mal den Quellcode hier mal an, ich habe da so eine Ahnung.

Gruss
Jadeclaw.

von Holger K. (krulli) Benutzerseite


Lesenswert?

ich hab mal ein bissl gegoogelt:
Schaltung: http://www.olimex.com/dev/avr-p28.html

Wie hast du die Fuse-Bits vom ATmega8 gesetzt?
Die Software ist ja für 4 MHz Taktfrequenz geschrieben...

@Dino
siehe Eingangsposting

von Zsolt (Gast)


Lesenswert?

ohhhhhh!

anscheinend ein fehler im tutorial - habe die baudrate im TERMINAL auf 
2400 gesetzt und empfange jetzt Test!  aber wie bringe ich jetzt den uC2 
(empfänger) dazu  auch einen Wert zu empfangen?  also ohne pc uC<->uC2

von Holger K. (krulli) Benutzerseite


Lesenswert?

Kein Fehler im Tuto vermut ich, sondern Du hast den Mega8 nicht auf die 
richtige Taktfrequenz / Taktquelle eingestellt

von Karl H. (kbuchegg)


Lesenswert?

> Kein Fehler im Tuto vermut ich,

Ganz sicher sogar keiner.

> sondern Du hast den Mega8 nicht auf die
> richtige Taktfrequenz / Taktquelle eingestellt

Die Software ist für 4 Mhz geschrieben. Seine Baudrate
ist genau 1/4 dessen was sie bei 4Mhz sein sollte.
Logische Schlussfolgerung: Sein µC läuft nicht auf dem
Quarz sondern auf dem internen Taktgenerator mit 1 Mhz

> aber wie bringe ich jetzt den uC2
> (empfänger) dazu  auch einen Wert zu empfangen?

Falsche Frage.
Kümmere dich erst mal darum, dass µC1 so arbeitet wie
er soll.
Das heist: Die Fusebits umstellen, so dass auch der
Quarz benutzt wird. Und dann änderst du erst mal die
Senderoutine so um, dass die auch von 8Mhz ausgeht und
nicht von 4.

Und erst dann, kommt der 2te µC drann. Du fängst damit
an, den vom PC aus anzusteuern. Solange das vom HTerm
(oder Hyperterminal) aus nicht funktioniert brauchst du
gar nicht daran denken vom µC1 aus an µC2 zu senden.

von Zsolt (Gast)


Lesenswert?

wie gesagt, ich habe ja die quellcodes (oben verlinkt) verwendet, welche 
im tutorial aufgelistet waren.
hmm.. kennt sich jemand mit TERMINAL aus? verstehe ned ganz ganz wie das 
funktioniert wenn ich das receive programm testen möchte.. wenn im .asm 
programm '1' abgefragt wird, muss ich dann in TERMINAL hex, dez oder was 
auch immer senden?

lg und nochmals danke!!!

von Zsolt (Gast)


Lesenswert?

@ Karl Heinz:

also die clock von 4000000 auf 8000000 setzen oder? (.equ CLOCK = 
8000000 )

und wie funktioniert das mit denn Fuse bits bitte?

danke für die informative antwort!

von Sonic (Gast)


Lesenswert?

UBRRL muss bei 8MHz und 9600 baud auf 51 gesetzt werden, als 
Terminalprogramm empfehle ich Hterm.exe, ist einfach (ohne 
Installation), alles auf einen Blick und Freeware. Die zwei 22pF-Kerkos 
am Quarz gegen Masse nicht vergessen! Wenn die Taktfrequenz nicht genau 
stimmt kanns bei Zeitkritischen Sachen wie USART zu Fehlern kommen.

von Holger K. (krulli) Benutzerseite


Lesenswert?

Laut Schaltung scheinen die Kerkos schon drauf zu sein, eventuell 
"unterputz" als SMD

Fuses: Für Anfänger ein heißes Eisen
http://www.mikrocontroller.net/articles/AVR_Fuses

Lesen und verstehen (wichtig)

von Karl H. (kbuchegg)


Lesenswert?

> wie gesagt, ich habe ja die quellcodes (oben verlinkt) verwendet,
> welche im tutorial aufgelistet waren.

Die Baudrate wird von der Taktfrequenz abgeleitet indem
diese solange runtergeteilt wird, bis die richtige Frequenz
für den Sende/Empfangsteil der RS232 entsteht. Daher
muss man die Taktfrequenz kennen um den Teilerfaktor
einstellen zu können.

Die Software die du hast macht das auch. Einzige Bedingung:
Man muss ihr sagen wie hoch denn die Taktfrequenz tatsächlich
ist. In deiner Software ist 4Mhz eingetragen (die 4000000 ganz
am Anfang). Wenn dein µC aber nichtmit 4Mhz läuft, dann kann
das gar nicht funktionieren. Alte Regel: Wenn die Eingangswerte
schon Mist sind, dann kann hinten nur Mist rauskommen.
Aus den Werten die du ermittelt hast wenn die Sendefunktion
funktioniert, kann man ablesen, dass dein µC mit 1Mhz läuft.
Er sollte aber mit 8 Mhz laufen, denn da ist ein 8Mhz Quarz
auf dem Bord (auf dem Quarz steht im übrigen drauf, wie schnell
er läuft). Die einzige logische Folgerung: Dein µC ist noch
auf 'interne Taktquelle' eingestellt und nicht auf 'externen Quarz'.
Den brauchst du aber, wenn die Sendefunktion langfristig stabil
laufen soll.
Also lies mal nach, wie du in den Fusebits den externen Quarz
aktivieren kannst. Das sind die CKSEL0 bis CKSEL3 Bits. WIe man
die umstellt hängt von der Brennsoftware ab, die du benutzt.

> hmm.. kennt sich jemand mit TERMINAL aus? verstehe ned ganz ganz
> wie das funktioniert wenn ich das receive programm testen möchte..
> wenn m .asm programm '1' abgefragt wird, muss ich dann in
> TERMINAL hex, dez oder was auch immer senden?

Du drückst einfach auf die Taste '1'. Oberste Zeile, gleich neben '2'
Dein Terminalprogramm sendet dann den ASCII Code für '1' über
die serielle Schnittstelle. Am µC wird das dann (hoffentlich)
korrekt empfangen. Dein Programm wertet das empfangene Zeichen
aus indem mit '1' verglichen wird. Da das dann eine Gleichheit
ist, macht dein Programm was immer programmiert ist zu tun, wenn
eine '1' empfangen wird.

von Sonic (Gast)


Lesenswert?

Was die Fuses angeht: kann nur jedem empfehlen (besonders Anfängern!), 
die paar € für den AVRISP auszugeben! Im Prog-Plugin vom AVR-Studio sind 
die Fuses sauber mit Klartext aufgelistet und werden schon beim Aufrufen 
des Reiters vom µC gelesen. Auch die ISP-Frequenz ist übersichtlich 
einstellbar.

von Zsolt (Gast)


Lesenswert?

@ Karl heinz Buchegger

Ich habe jetzt den Empfänger mal an den Pc angeschlossen und probiert 
ihm 1 zu übergeben! Laut programm müsste er doch jetzt den PORTB,0 
setzen und somit müsste ich doch 5V am Port messen können, oder?

Danke für eure Hilfe, ich werde mir mal die Fusebits durchlesen!

MfG Zsolt

von Karl H. (kbuchegg)


Lesenswert?

Für den Empfänger gilt das Gleiche wie für den Sender:
Die UART Einstellung muss richtig sein. Solange du
im Empfangsprogramm eine andere CLOCK Frequenz eingestellt
hast als die die der µC tatsächlich benutzt, hat es keinen
Sinn da rumzuprobieren.

von Zsolt (Gast)


Lesenswert?

ich verstehe eines nicht ganz, ich kann ja die fuse bits anscheinend im 
avr studio einstellen..

zum brennen verwende ich ein fertiges c programm eines bekannten, mit 
einem selbst gebasteltem kabel - leider stelle ich fest dass viele leute 
hier schreiben, die fusebits werden im brenn programm (GUI) eingestellt, 
nun habe ich ja leider kein solches, nur ein selbst gebasteltes welches 
nicht von mir geschrieben ist.

wie kann ich ansonsten meine fusebits einstellen?
verständnissfehler?

lg

von F. K. (freddy436)


Lesenswert?

Du hast ein ISP Kabel für den Parallel Port?

-> Google: "yaap" oder "ponyprog"
Und Tutorial lesen!

von Zsolt (Gast)


Lesenswert?

ja ich hab ein kabel für den parallelport aber ich weiss ja ned ob yaap 
etc die gleichen pins am parallel port verwendet wie das 
zusammengestöpselte programm welches ich habe und worauf das kabel 
abgestimmt ist

von F. K. (freddy436)


Lesenswert?

-> Kabel vergleichen
Bitte mal anfangen selber mitzudenken.

von Florian G. (suffix)


Lesenswert?

Ja. Ansonsten mal STK500 bei ebay (kessler electronic) für 80€ kaufen.

von Karl H. (kbuchegg)


Lesenswert?

> zum brennen verwende ich ein fertiges c programm eines bekannten,
> mit einem selbst gebasteltem kabel - leider stelle ich fest dass
> viele leute hier schreiben, die fusebits werden im brenn programm
> (GUI) eingestellt, nun habe ich ja leider kein solches, nur ein
> selbst gebasteltes welches nicht von mir geschrieben ist.

Dann hast du 2 Möglichkeiten:
* Entweder du rufst deinen Bekannten an, wünscht ihm gleich mal
  vorsorglich ein gutes neues Jahr und fragst ihn, wie man mit
  seinem Brennprogramm an die Fuse Bits rankommt

* Du schnappst dir einen Schraubenzieher und öffnest mal
  das Gehäuse deines Parallelportsteckers. Danach vergleichst
  du die Verschaltung mit dem was zb. PonyProg haben möchte
  und weist ob das geht oder nicht.

Du kannst natürlich auch einfach mal PonyProg starten, das
Kabel anstecken und versuchen ob du die Fusebits einlesen
kannst. Das musst du sowieso bevor du neue Fusebits brennst.
Pony sagt dir schon, ob das geklappt hat oder nicht.


Ein bischen Fantasie musst du schon selbst aufbringen um
Probleme zu lösen. Du möchtest einen µC programmieren und
das geht nicht ohne etwas Eigeninitiative.

von Zsolt (Gast)


Lesenswert?


von Sonic (Gast)


Lesenswert?

Wieder meine alte Leier:
Leute, investiert doch die 39€ für'n AVRISP, dann seit ihr diese 
Probleme los! Gerade Anfänger verlieren mit dem Ponyprog / Yaap - Gedöns 
schnell die Lust. Wenn man bei mehr als einer möglichen Fehlerquelle 
suchen muss wird's schwierig! GUTES WERKZEUG IST GOLD WERT!

von F. K. (freddy436)


Lesenswert?

Sonic wrote:
> Wieder meine alte Leier:
> Leute, investiert doch die 39€ für'n AVRISP, dann seit ihr diese
> Probleme los! Gerade Anfänger verlieren mit dem Ponyprog / Yaap - Gedöns
> schnell die Lust. Wenn man bei mehr als einer möglichen Fehlerquelle
> suchen muss wird's schwierig! GUTES WERKZEUG IST GOLD WERT!

Dem kann ich nur zustimmen, ich hab auch mit dem Parallelen Kabel 
angefangen, allein schon das ständige hin und her gewechsel zwischen 
AVRStudio und yaap hat schnell gestört. Vor allem auch die Fuse bits 
lassen sich über AVRStudio deutlich besser verwalten.
Am besten baust du dir noch selber einen ISP Adapter, dann lernst du 
vielleicht noch ein wenig dabei und es ist nochmal billiger.

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.