Guten Tag, ich habe folgendes Problem. Ich habe ein Evaluationsboard von Pollin, hat mir immer gute Dienste erwiesen. Hat bis dato alles irgendwann funktioniert. Nur nun komme ich bei was ganz "simplen" nicht weiter: Ich habe einen Atmgea16, laut Pollin Beschreibung liegen dem Set 3mal 8Mhz Quarze bei. Stelle ich nun den Atmega16 auf 8Mhz und Baudrate 9600 Empfange ich über ein Nullmodelkabel zu einer ShineNet IO Karte (seriell) bei einem kleinen Testprogramm nichts vernünftiges. Stelle ich nun den Quarz auf 16 Mhz funkioniert die Verbindung. Ich schließe daraus das es wohl ein 16Mhz Quarz ist`? Übersehe ich was? 2. Mein kleines Testprogram wartet in einer Schleife auf die Eingabe eines Bytes von der Rs232 Schnittstelle. Ich habe es in 4 Tagen nicht geschafft ein Byte zu empfangen :( Ich habe folgendes probiert: Zuerst benutzte ich noch einen USB-to-Seriell Converter. Der funkioniert (wenn auch langsam) zum flashen der avrs über ponyprog. Er funktioniert auch um Ausgaben vom Controller zu übertragen (Anzeige mit putty, hyperterminal, bascom terminal emulator getestet). Allerdings kann ich wie beschrieben keine Werte senden. Es kommt zumindestens nichts an. Das Testprogramm macht nichts anderes als in einer Schleife auf eine eingaben zu warten und im falle diese Auszugeben. Zuerst vermutete ich den USB-to-Seriell Convertet, also besorgte ich mir eine PCI-Nachrüstkarte um wieder echte serielle ausgänge zu haben. Ponyprog rennt jetzt :) Allerdings immer noch keine Reaktion des COntrollers wenn ich über die Rs232 Schnittstelle was sende. Meine nächste Vermutung: Der PegelConvertet max232. Also im Datenblatt nachgeschaut und siehe da, er ist ein dualreceiver - ich habe alos noch jeweils einen ungenutzen ein und- ausgang. Also 2 Brücken gelötet und den anderen Eingang des Max232 angeschlossen sowie den Ausgang. Leider gleiches Ergebnis ;( Hat irgendjemand eine Idee Anregun Erfahrung mit solch einem Problem. Ach ja ich habe schon einen anderen atmega getestet, richtig geraten, leider gleiches Ergebnis. Danke schonmal! mfg Jonas
Hier das Testprogramm ist eins zu eins aus dem Internet kopiert! Nur der Atmega Typ sowie das Quarz auf 16Mhz eingestellt.
BTW: Wie verstellst du denn einen Quarz? Du meinst, du änderst die Variable, die die Taktrate angibt?
@LordZiu: Sorry für die blöde Ausdrucksweise, ich meinte ich setzte im Quellcode die Variable $crystal auf den Wert 16000000 Fusebits lese ich schnell aus...
Pollin hält sich beim Eintüten der Bauteile nicht immer an die Beschreibung.
@Stefan B: Dachte ich mir auch schon :) @Lordziu: Anbei meine Fusbit config.
So, und was steht jetzt auf dem Quarz drauf? Wenn du es nicht interpretieren kannst, mach ein Foto und zeig es uns.
Da steht auf 2 von 3: A83NDK69 Und auf dem anderen: 8c000000 Wenn ich Daten vom Controller in putty empfangen kann, sollte doch die Baudrate bzw der Wert von $crystal stimmen? oder?
Deine Fuse Einstellung steht auf External Clock Das kann nicht gehen.
Jonas Biensack schrieb: > Da steht auf 2 von 3: A83NDK69 > Und auf dem anderen: 8c000000 > Wenn ich Daten vom Controller in putty empfangen kann, sollte doch die > Baudrate bzw der Wert von $crystal stimmen? oder? Sollte eigentlich. Was du auch noch zum Testen machen kannst, ist eine LED in einem genügend langsamen Takt an- und auszuschalten. Z.B. alle 5 oder 10 Sekunden. Das kann man ganz gut mit ner Uhr nachmessen, ob das Delay stimmt.
Also zusammenfassung: Externes Quarz ist über fusebit eingeschaltet. Im Quellcode ist die baudrate auf 9600($baud = 9600) und das quarz auf 16mhz eingestellt ($crystal = 16000000). Ich empfange wie erwartet daten in putty. Das funktioniert! Mein Problem liegt beim Emfpang von Daten im MicroController.
>Externes Quarz ist über fusebit eingeschaltet.
Externes Quarz =! External Clock
anderst gefragt: gibt es eine fusebit einstellung die ein senden von daten ermöglichen aber einen empfang unmöglich machen würde?
Jonas Biensack schrieb: > anderst gefragt: gibt es eine fusebit einstellung die ein senden von > daten ermöglichen aber einen empfang unmöglich machen würde? Nein. Wenn das Senden mit der eingestellten Baudrate funktioniert, dann auch das Empfangen. Einzige Möglichkeit wäre noch: Du bist ein ganz kleines bischen neben der eingestellten Frequenz. Das kann zb auftreten bei internem RC-Oszillator. Der schwingt normalerweise auf zb 8 Mhz, hat die aber nicht ganz genau. Ist nun die UART im PC etwas toleranter auf die Abweichung dann kann sie zwar noch empfangen, aber das was vomPC gesendet wird, liegt ein winziges bischen daneben. Empfangen müsstest du trotzdem etws, nur nicht das richtige. Da du aber 16Mhz im BASCOM angegeben hast und offenbar mit dieser Einstellung und 9600 Baud auf dem PC auch mit 9600 Baud empfangen kannst, kann man davon ausgehen, dass der Quarz auch benutzt wird. Einen TC-Oszillator mit dieser Frequenz gibt es nicht. Das nächste wäre 8Mhz und dann würde mit identischen Baudrateneinstellungen auf µC und PC nichts mehr gehen.
Habe gerade folgendes nochmal gelesen: "Für einen externen Quarz ist die Einstellung External Crystal/Ceramic Resonator notwendig, also eine Einstellung von 1111. Unglücklicherweise ist bei den vielen Fusebit Einstellprogrammen nicht auf den ersten Blick offensichtlich, ob ein gesetztes Häkchen nun eine 1 oder eine 0 bedeutet. Anstatt auf 1111 werden die Fusebits auf 0000 gesetzt und damit ein External Clock eingestellt. Ein External Clock ist aber ein Quarzoszillator. Ein Quarz wird an so einer Einstellung nicht ins Schwingen kommen" das würde bedeuten meine fusebit setzen den avr auf externes quarz oder nicht?
Jonas Biensack schrieb: > das würde bedeuten meine fusebit setzen den avr auf externes quarz oder > nicht? Stell fest, wie schnell dein µC wirklich getaktet wird. Mach eine Schleife in der eine LED ein/aus geschaltet wird. Dazwischen immer ein Wait (also Wartschleifen). Da die Warteschleifen auf die Taktfrequenz abgestimmt werden müssen, sieht man da, ob das stimmen kann. Ob deine Taktfrequenz ein paar Khz daneben liegt oder nicht, wirst du so nicht feststellen können. Aber das ist ja auch nicht das Thema. Hast du einen Wait 1 drinnen und die Wartezeit ist 1 Sekunde, dann stimmt die $crystal Einstellung mit 16Mhz. Ist die reale Wartezeit 2 Sekunden, dann arbeitet der µC mit 8Mhz. Den Unterschied 1 Sekunde zu 2 Sekunden sieht man aber mit freiem Auge.
Eine Uhr hatte ich bereits implementiert und die Abweichung bei einer Stunde war mit bloßen Auge / Uhrenvergleich nicht zu messen (weniger als 1 sek). Das passt schon.
Ich habe das Gefühl das der Max232 spinnt. Ich habe den zweiten Ausgang mal beschaltet. Gleiches Ergebnis.
Frage zu der Schaltung. Sollte ich auch den zweiten Eingang dann beschalten? Also immer Eingang 1 und Ausgang 1 oder geht auch Eingang1 und Ausgang 2
Jonas Biensack schrieb: > Frage zu der Schaltung. Sollte ich auch den zweiten Eingang dann > beschalten? > Also immer Eingang 1 und Ausgang 1 > oder geht auch Eingang1 und Ausgang 2 Ist völlig wurscht. Ich denke nicht, dass der MAX spinnt. Schnapp dir eine LED, häng einen Vorwiderstand 1k drann. Ein Ende dieser Testschaltung an Masse (kurz mit dem anderen Ende an +5V titschen um zu sehen ob die LED auch wirklich leuchtet). Dann legst du einen Stein auf die PC-Tastatur (so dass der auf Dauersenden ist) und gehst mit deiner LED die Schaltung, beginnend beim Kabel, durch. Das Blinken der LED ist nicht zu übersehen. Hast du einen Punkt kontrolliert, gehst du eine Stufe weiter, bis du weißt, wo das Signal verschwindet.
Danke schonmal! Ich sollte vielleicht noch was zu dem Projekt allgemein sagen. Geplannt ist eine Klimasteuerung für ein Terrarium. Ich habe hier SHT75 Feuchte - Temperatursensor erfolgreich angeschlossen. Mehrere Relaistreiber, Lüftersteuerung usw sind gerade im Aufbau. Ein Programm (vb net 2008) kommuniziert über Rs232 mit der Steuerung. Bis Dato sendet der Controller einmal pro Sekunde die aktuelle Zeit, Datum, sowie Feuchte - Temperaturwerte und aktuelle relaiszustände. Die Software auf dem Rechner zeigt mir dann über ein Chart Controll die Messwerte als Kurve an. Der Pc dient also als Schnittstelle Mensch - Controller. Soweit sogut. Nun habe ich mir "Protokol" ausgedacht nach den PC / Controller kommunizieren. Eigentlich ziemlich simpel. Wäre da nicht das Problem das "nichts aber auch garnichts" vom MircoController empfangen wird. Daraufhin habe ich dann das Program auf 7 Zeilen! gekürzt um das Problem einzugrenzen. Wie oben beschrieben. Ich werde das mal probieren mit der LEd. Danke! Meld mich gleich nochaml
So also: Direkt am Max232 blinkt sie schön, wenn ich sende. Hab ein kleines Tool gemacht, was alle 2 Sekunden "A1" sendet und beeped. So hab ich auch ein akustisches Signal und muss nicht auf den Pc schauen. Nach dem Max leuchtet sie ständig( invertiert ?!). Ich meine ein ganz kurzes abschächen der leuchtkraft wenn daten gesendet werden zu sehen. Mh....
Vielleicht die Leitung vom Max232 zum MicroController nochmal mit einem Widerstand gegen Masse ableiten...?! Macht das sinn?
Jonas Biensack schrieb: > So also: Direkt am Max232 blinkt sie schön, wenn ich sende. Hab ein > kleines Tool gemacht, was alle 2 Sekunden "A1" sendet und beeped. So hab > ich auch ein akustisches Signal und muss nicht auf den Pc schauen. Nach > dem Max leuchtet sie ständig( invertiert ?!). Ich meine ein ganz kurzes > abschächen der leuchtkraft wenn daten gesendet werden zu sehen. Mh.... Geh mit der Baudrate runter. 300 Baud sieht man gut
Ok danke für den Tip. Ich glaube nämlich die Led ist doch dauern an :( Würde auf einen defekten max232 hinweisen... Ich progge mal schnell auf baudrate 300...
Also Baudrate ist nun auf 300 eingestellt. Hast recht jetzt sieht man es schön. Allerdings nur vor dem Max232. Danach ist die LEd ständig an? Max232 tot? Was meint ihr?
Was heißt denn "vor dem Max232"? Hab ich es richtig verstanden, dass dein Controller Zeichen sendet und diese zwischen Controller und MAX232 mit der LED sichtbar sind und zwischen MAX232 und PC nicht mehr? Was ist wenn der PC Daten sendet?
PC---1--Max232----2---MC RXD Empfangen (funktioniert nicht) PC------Max232--------MC TD Senden (funktioniert) Bei 1: Led blinkt wenn Pc Daten sendet Bei 2: Led ist ständig an Hoffe so ist ersichtlich, danke für euer Mühe! mfg Jonas
Der Max232 hat ja zwei Sender / Empfänger. Ich habe nun den zweiten Empänger beschaltet und nun geht die Led kurz aus, wenn Daten gesendet werden. Das ist doch schonmal gut, allerdings sobald ich den avr dann dann an den max232 hänge, leuchtet die led wieder ständig. sie geht also bei datenempfang nicht kurz aus. Ist das normal? Sollte die Led auch ausgehen, wenn der avr drannhängt: PC-------max232------1-----avr PC-------max232------2----- 1: Hier leuchtet die LED ständig 2: Hier geht sie bei Datenempfang vom PC aus. Wie könnte ich weiter vorgehen? mfg jonas
Du kannst auch mal die Funktion der Ladungspumpen prüfen. Im Idealfall solltest Du an Pin 2 +10V und an Pin 6 -10V messen. Sollte das eklatant abweichen, so kontrollierst Du am besten die Beschaltung mit den Kondensatoren nochmal. Allerdings glaube ich nicht, dass es daran liegt denn das Senden von Controller zu PC funktioniert ja. Außer eine unerwünschte Verbindung, die die RxD-Leitung zwischen Controller und MAX232 auf Vcc oder einem ähnlichen Potential hält fällt mir spontan auch nichts ein. Schaffst Du es dem MAX232 so in die fassung zu stecken, dass Pin 10 bzw. 13 nicht mit drin stecken? Dann könntest Du dort nochmal die LED dran halten.
Jonas Biensack schrieb: > Das ist doch schonmal gut, allerdings sobald ich den avr dann dann an > den max232 hänge, leuchtet die led wieder ständig. sie geht also bei > datenempfang nicht kurz aus. Ist das normal? Nein, ist es nicht. Der entsprechende Eingang vom AVR ist auf Eingang gestellt. Wenn der MAX auf low ziehen will, dann soll er das auch können. Du bist am richtigen Pin? Wenn das stimmt, kanns nur noch ein Softwareproblem sein oder aber der max hat es wirklich hinter sich gebracht.
Jonas Biensack schrieb: > Das ist doch schonmal gut, allerdings sobald ich den avr dann dann an > den max232 hänge, leuchtet die led wieder ständig. sie geht also bei > datenempfang nicht kurz aus. Ist das normal? Du hattest schon den gleichen Einfall :-) Super! Normal ist das nicht. Vielleicht hast Du den Pin am AVR versehentlich als Ausgang konfiguriert.
Danke schonmal. @Chris: Pin2: 8,91 Volt. Pin6: -8.31 Volt. @Karl Heinz: Ich gehe direkt mit einem Kabel von Pin 9(max232) zu Pin 14(atmega16). Mh...
Zusammenfassung: An dem zweiten Empfänger für Rs232 Pegel (Pin8 am max232) blinkt die Led auf wenn Daten gesendet werden. -gut- An dem zweiten Ausgang für TTL Pegel (Pin9 am max232) geht die Led kurz aus wenn Daten gesendet werden und der Avr nicht angeschlossen ist. Ist der Avr aber angeschlossen, bleibt die Led ständig an, auch wenn Daten gesendet werden. danke für eure mühe.
So der minimale testcode: $regfile = "m16def.dat" $crystal = 16000000 $baud = 300 Dim Akey As Byte 'Here we declare a byte variable Do Print Print "Hello, hit any alphanumerical key..." Akey = Waitkey() 'Waitkey waits untill a char is received from the UART Print Akey Loop
> @Chris: Pin2: 8,91 Volt. Pin6: -8.31 Volt. Passt. Du kannst mal noch versuchen einen 1k Pullup gegen Vcc an Pin 9 des MAX 232 anzuschließen (ohne AVR in der Schaltung). Wenn die LED dann immer noch blinkt halte ich den MAX232 für ok und der Fehler ist beim AVR zu suchen.
Interresant ist, wenn ich das Kabel vom avr an den Max232 klemme, das die led heller leuchtet? 1. Led leuchtet: masse | Led | PC--------(pin 8)Max232(pin 9)---------------- 2. Led leuchtet heller: masse | Led | PC--------(pin 8)Max232(pin 9)----------------------------------(pin14)avr Auf was könnte das hinweisen?
Also Led geht immer noch kurz aus wenn ich Daten sende mit pullup von pin9 nach masse(1k). Hab einen anderen avr ausprobiert. Kommt nichts. Das kann doch irdendwie alles nicht war sein. verzweifel mh....
Sobald ich einen avr an den Max232 leuchtet die Led ständig. Mache ich ihn ab, geht sie aus bei Datenempfang. 3 avr durchprobiert. Ich mach doch irgendwas grundsätzlich falsch ;( mfg jonas
Hm, wahrscheinlich liegt es an der Software. Ich habe von BASCOM überhaupt keinen Schimmer., daher kann ich dir hier nicht mehr weiterhelfen. Trotzdem viel Erfolg noch! P.S. Das einzige was mir noch einfällt: Was misst Du denn am AVR Pin 14 für eine Spannung wenn der Pin in der Luft hängt? 5V? Wenn ja, was misst Du wenn Du mit einem 1k Pulldown an GND gehst? Sollten das immer noch 5V sein, so ist der Pin irgendwie noch als Ausgang konfiguriert. Ist nur noch so eine Idee...
Hast recht! Jeweils frei in der Luft und mit pullup nach masse(1k) liegen knapp 5 volt an. Was heisst das nun genau? mfg jonas
Danke für die viele mühe!. Hat jemand zufällig ein kleines fertig compiliertes Programm, was einfach nur ein Zeichen über uart empfängt und das wieder zurückgibt. Ein echo quasi. mfg jonas
Mir ist vielleicht noch was wesentliches eingefallen. Ich habe als ich das pollin board bestellt hatte vergessen ein NEtzteil mitzubestellen. War soweit kein Problem da ich noch ein 5 Volt netzteil hier rumliegen hatte. Das pollin board braucht ja ein 9 Volt Netzteil mit Wechselspannung. Das was ich hier rumliegn hatte, hat allerdings 5 Volt Gleichspannung. Ich habe das netzteil an folgenden Punkten(s. Anhang) an die Schaltung angeschlossen. Bis dato hatte ich keine Probleme, aber vielleicht hat das ganze ja was mit dem Problem hier zu tun! mfg Jonas
> Jeweils frei in der Luft und mit pullup nach masse(1k) > liegen knapp 5 volt an. Was heisst das nun genau? Das der Pin nicht als Eingang konfiguriert sein kann. -> Das Problem ist also wohl in deiner Software zu suchen. > Ich habe das netzteil an folgenden Punkten(s. Anhang) an > die Schaltung angeschlossen. Ist es stabilisiert (ggf. nachmessen)? Alles über 5,5V kann Schaden am AVR verursachen. Unterspannung kann die Funktion natürlich auch beeinträchtigen :-) Ansonsten kein Problem.
Sind saubere 5 Volt. Ich werd mir jetzt mal avrstudio laden. ein beispiel programm aus dem netz suchen und versuchen das zu compilieren. Danke für deine Hilfe. Ich meld mich nochmal. mfg jonas
Mein Tip: Lerne Assembler und arbeite das AVR-Tutorial hier durch. Das dauert zwar, aber nur so wirst Du deinen Controller so richtig kennen und verstehen lernen.
Guter Tip, ich habe schon ne ganze Weile in assembler geproggt. War alles toll, bis irgendwelche Side-Effecte aufgetretten sind die ich nicht debuggen konnte. Das war grausam. Ich hab dann einfach mal aus Spass Bascom probiert und das hat sofort super gefunzt. Entwicklungszeit hat sich wesentlich verkürzt. Vor allem funktionierte meistens alles wie erwartet. Und Bascom compiliert es ja auch in asm und meistens optimiert. Nun ja, wird mir wohl nichts anderes übrig bleiben als es wieder anzugehen. Sobald ich den Fehler habe, werde wieder auf bascom umschweifen. Mfg Jonas
So, habe nun ein Software-Uart mit bascom eingerichtet: $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 300 Dim Tstr As String * 4 Dim Num As Word 'open channel for output Open "comb.2:300,8,n,1" For Input As #2 Do Waitms 100 Print "text: " Input #2 , Tstr Print Tstr Print "number: " Input #2 , Num Print Num Loop End Und siehe da es funktioniert. Keine Ahnung warum der Hardware-Uart nicht wollte. Auf jeden Fall bin ich nun sehr froh das es nun endlich weiter gehen kann. Ich danke allen die sich die Mühe gemacht haben mir zu helfen. Also danke! mfg Jonas
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.