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
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.
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
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!
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
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
> 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.
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!!!
@ 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!
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.
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)
> 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.
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.
@ 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
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.
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
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
> 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.
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!
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.