Hallo,
ich habe mit einer RS232 Schaltung Probleme (Atmega) . Auf dem
Steckbrett funktioniert alles wunderbar, nur mit der geätzten Platine
bekomme ich keine Ausgabe.
Schaltung: Atmega16 mit Max233 und der uart lib von Peter Fleury.
Wie kann man überprüfen, ob der Max233 auch funktioniert ?
Ich messe verschiedene Spannungen an den jeweiligen Pins, allerdings
habe ich kein Oszi und kann daher kein Protokoll debuggen.
Physikalische Verbindungen habe ich soweit möglich überprüft. Max233
auch mal gegen AD203 ausgetauscht, ohne Erfolg.
Beschaltung gemäß Datenblatt.
Die Funktion des Micro kan ich mit LEDs testen, wie gesagt, auf dem
Steckbrett funktioniert es wunderbar.
Kann es am 16Mhz Quarz liegen ? Ist ja auch kein Baudratenquarz, aber
auf dem Steckbrett gehts.
Wen ich die Pins 2+3 des seriellen Anschusses verbinde, kommt das Echo
wieder im PC an. Verbindung zum PC ist also ok.
Baudrate ist 9600.
Irgendeine Idee zum Debuggen ?
> Wen ich die Pins 2+3 des seriellen Anschusses verbinde
Wo verbindest du die:
Am RS232 Stecker am PC
Am RS232 Stecker am µC
An den Eingängen zum MAX232
Auf den Ausgängen des MAX232
An den Eingängen zum Mega16
Um die physikalische Verbindung komplett zu testen,
nimmst du den Mega16 aus dem Sockel und verbindest drekt
an diesem Sockel mal Tx mit RX. Kommt das Echo immer noch?
ob die 16mhz ok sind müßtest du nach Formel Datenblatt Seite 166 mal
rechnen, sollte nicht über 0,2% Errorlevel liegen.
du solltest bei zügigem Datensenden auch mit dem Multimeter einen Wert
verschieden 0V messen auf der TXD (TTL) Strecke.
Davon abgesehen, falls du selber fertigst würde ich die Leiterbahnen
etwas großzügiger wählen und Masseflächen reinnehmen.
...nehm den 233 und den mega16 auch ....
Du hast einen female-RS232 verbaut.
Ist dann da nicht Pin 2 und Pin 3 falsch
rum angeschlossen. OK. Ist kein Problem
wenn dein Kabel richtig rum gekreuzt ist.
ach ja, die letzte Tabelle hatt ich übersehen.
Hm.
Obiges Posting...hm. Sollte man nicht TXD und RXD kreuzen ? Weil
Empfänger des einen Sender des anderen.
Kann ich leider erst heute abend prüfen ... Ich gebe dann Bescheid.
Vielen Dank auf jeden Fall für die Tipps !!!
Female Buchse, gekreutztes Kabel ? Ähem, da muss ich wohl auch noch
einmal nachschauen ..
> Female Buchse, gekreutztes Kabel ? Ähem, da muss ich wohl auch noch> einmal nachschauen ..
Da kommst du sofort drauf, wenn du am µC-Sockel die
Brücke jumperst. Wenns nicht geht, ist entweder der
MAX233 hinüber oder das Kabel muss gekreuzt (oder
nicht gekreuzt) werden. Bin jetzt zu faul um
darüber nachzudenken was es denn sein muss.
Im Zweifelsfall nimmst du ein Voltmeter und misst
die Spannungen nach:
Kabel vom µC abziehen.
An einem Pin von der µC Buchse (entweder 2 oder 3) liegt
-9 Volt (oder -10, egal) an.
Am entsprechenden Pin vom Kabel wirst du ca. 0V messen.
Und vice versa: Am anderen Pin am Kabel lieget negative
Spannung, der entsprechende Pin an der µC ist wieder ca. 0
Kommt beim Einstecken negativ zu negativ, dann musst du
das Kabel noch mal (aus-)kreuzen.
Persönlich würde ich es allerdings nicht so umständlich machen:
Kabel aufmachen. Pin 2 und 3 kreuzen. Probieren.
Die Aussage das die Kreuzung im Kabel ist war auch nicht so ganz richtig
von mir, denn es ist ja ein 1:1 Kabel (Modemkabel) was du benutzt. Die
"Kreuzung" kommt gewissermaßen durch die unterschiedliche Pinbelegung
zustande.
Im Endeffekt mach ichs aber auch wie kbucheg :-). Einfach tauschen und
probieren.
Normalerweise kreuzt man RX/TX zwischen dem MAX232 (MAX233) und dem
Lötanschluss der RS232-Buchse.
Dann kommt TX vom PC (Pin 3 der RS232 Buchse oder des RS232 Steckers)
auf RxIN des MAX... kommt und RX vom PC entsprechend auf TxOUT.
Und dann kann man ein normales 1:1 verbundenes Kabel mit Stecker (µC
Seite) und Buchse (PC Seite) benutzen. Normales Kabel, weil man es prima
zun Verbinden von PC und Modem oder anderen RS232 Geräten etc. benutzen
kann. Baut man alle seine Geräte mit RS232-Buchse auf kann man alle
Verbindungen zum PC mit so einem 1:1 Kabel machen. Hat man zwei Kabel
kann man auch super eine Verlängerung bauen.
Wenn man vermutet, dass man trotz aller Vorsicht ein sog. Nullmodemkabel
erwischt hat, stöpselt man das Kabel an den PC und misst die Spannung
zwischen Pin 3 und Pin 5 (GND). Wenn da eine neg. Spannung -3 V bis -15
V vorhanden sind, ist alles gut, dann ist es ein normales 1:1 Kabel und
kein Nullmodemkabel.
Liegt die neg. Spannung zwischen Pin 2 und GND, ist es ein
Nullmodemkabel. Kennzeichnen und ins Regal legen für den Fall, dass man
mal zwei PCs miteinander verbinden will, bei denen man ja schlecht im
Gerät die Leitung zwischen RS232-Anschluss und RS232-IC kreuzen kann.
So, jetzt habe ich die Schaltung vor mir.
Das Brücken der Pins 4+5 des RS233 im Sockel bringt ein prima Echo auf
dem PC. Alles sauber.
Zwischen Pin 2 und 5 des Verbindungskabels liegen -10V an. Also ist es
ein 1:1 kabel. Auch ok.
Ich habe mal in einer Endlosschleife ein String ausgegeben.
Am Prozessor (TXD, Pin15) sowie im Sockel des 233 an Pin2 (TXD) messe
ich mit dem Multimeter 2,2V.
Das ist etwas wenig, oder ist das bedingt durch die 9600 baud ?
"Zwischen Pin 2 und 5 des Verbindungskabels liegen -10V an. Also ist es
ein 1:1 kabel. Auch ok."
Nein. Wenn du es so getestet hast, wie ich vorgeschlagen habe, ist es
ein Kabel mit gekreuzten Leitungen. Da dein Schaltbild keine gekreuzten
Leitungen hat, passt es aber wieder.
Hast du schon Vcc vom µC kontrolliert? Durch eine schlechte GND
Verbindung oder andere grosse Verbraucher kann der zuwenig Saft
reinbekommen. Dann geht natürlich auch wenig raus...
Setze den TX-Pin vom µC testweise auf high und auf low (sekundentakt
oder so), NICHT im USART-Modus! Dann kannst du am Ausgang des MAX233
(SUB-D-Buchse) anmessen ob auch das Richtige 'rauskommt! Desweiteren am
RS232-Kabel Pin 2 und 3 gegen 5 messen, da wo keine Spannung ist muss
die TX-Leitung vom µC hin! Dort wo -8V oder +8V sind ist die TX-Leitung
vom PC zum µC.
Sorry, dass ich euch schon wieder nerve ...
Jetzt klappt das mit I2C nicht so richtig.
Pull-Ups liegen an, ich messe 4k7 bei beiden Pins am IC gegen Vcc.
Ich messe auf allen Pins P0-P7 des PFC8574A nach dem Init eine Spannung
von 5V, auch wenn ich in einer leeren While-Schleife bin.
Init mit:
*****
void i2c_init(void)
{
/* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
TWSR = 0;
TWBR = ((F_CPU/SCL_CLOCK)-16)/2; // ist >10, SCL_CLOCK = 100000L
}/* i2c_init */
*****
SDA liegt auf 5V, SCL auf 0,16V. Ist das nicht verkehrt herum ?