Hallo. Das sind die Momente, wo man ab liebsten alles hinschmeissen möchte.. Hardware: ATmega328P mit 20MHz Quarz. Serielle Anbindung über einen USB Dongle. Ich habe mit genau dieser Hardware eine andere Firmware geflasht, die etwas an der serielle Schnittstelle ausgibt = ok = Hardware läuft! (9600 8N1) Dann habe ich das Programm von hier: http://hekilledmywire.wordpress.com/2011/01/05/using-the-usartserial-tutorial-part-2/ genommen. Bekomme partout keine serielle Ausgabe? Habe auch mal den String mit PROGMEM in den Flash gelegt, weil ich nur die HEX geflasht habe. So ist der AVR geflasht: avrdude -c usbtiny -p m328p -e -U flash:w:serial.hex avrdude -c usbtiny -p m328p -U lfuse:w:0xf7:m -U hfuse:w:0xdf:m Was ist da nur falsch..? Peter
Wenn der String im Flash liegt, musst du ihn auch von dort holen. In PGMSPACE.H sind die dazu notwendigen Funktionen definiert.
Hmm.. ok. Hatte es jetzt mal mit einem buffer im Ram und strcpy_P(buffer,String); probiert.. wieder/immer noch nichts. --- Habe dann mal das alles Original belassen (ohne progmem) und auch den Eeprom Teil geflasht: avrdude -c usbtiny -p m328p -e -U flash:w:serial.hex avrdude -c usbtiny -p m328p -e -U eeprom:w:serial.eep avrdude -c usbtiny -p m328p -U lfuse:w:0xf7:m -U hfuse:w:0xdf:m = nichts :-( Peter
Tja... also... wenn ich die CPU Frequenz auf 16MHz ändere (weil der Quarz gerade im Board steckt) und das "PROGMEM" aus der String Deklaration entferne, alles compiliere und dann flashe, dann funktioniert es einwandfrei. Wie soll ich dann weiter helfen?
Peter Sieg schrieb: > Hardware: ATmega328P mit 20MHz Quarz. Sind die Fuses so gesetzt, dass er auch mit diesem Quarz läuft?
J.-u. G. schrieb: > Peter Sieg schrieb: >> Hardware: ATmega328P mit 20MHz Quarz. > > Sind die Fuses so gesetzt, dass er auch mit diesem Quarz läuft? Hätte auch vermutet dass entweder der interne Oszillator oder der Clockdiv aktiv ist...
Hallo. Die Fuses hatte ich oben gepostet. Die andere 'Testfirmware' läuft auch mit dem 20MHz Quarz und bringt eine serielle Meldung am Terminal.. ratlos Peter
Kannst du die "andere" Software posten? Dann kann man vielleicht den Unterschied sehen. Deine Flags sehen richtig aus. Ansonsten schließe ich mich deiner Aussage an: Ratlos
Peter Sieg schrieb: > Das sind die Momente, wo man ab liebsten alles hinschmeissen möchte.. Das wäre in diesem Falle wohl auch das Beste. Du hast ne komische Art, Software füe uC zu schreiben. Also: ich hätte an deiner Stelle mir für solche Tasks wie serielle Ein- und Ausgaben eine Unit geschrieben, die das wirklich ausprobiertermaßen tut und die wenigstens ein bissel eigensicher ist. Schlimmes Beispiel von dir: dein Programm wartet sich tot beim Senden, wenn aus irgendeinem Grunde die "Sender-ist-frei" Kondition nicht kommt. Sowas würde ich zeitlich begrenzen und im Fehlerfalle wenigstens ins aufrufende Programm zurückspringen. Obendrein würde ich sowieso die ganze serielle I/O auf Buffer und Interrupts umstellen, damit das Ganze nicht blockierend ist. OK, vielleicht sind die AVR's für sowas auch nur zu klein, aber selbst bei den ebenso kleinen PIC16Fxxx organisiere ich den seriellen I/O per Buffer und Interrupts. Das geht. Und wenn man es einmal wirklich gut ausgetestet hat, dann geht's immer wieder in allen folgenden Projekten. Ansonsten kommen mir für dein Problem nur folgende Fragen: - Power für UART eingeschaltet? - Clock für UART freigegeben? - Pins für UART richtig konfiguriert? - UART aktiviert und richtig eingerichtet? - eventuell konkurrierende Peripherie dediziert deaktiviert? W.S.
Hi Bei einem ATmega328P mit 20MHz Quarz: >- Power für UART eingeschaltet? kann man nicht abschalten >- Clock für UART freigegeben? Wird mit UBRR eingestellt >- Pins für UART richtig konfiguriert? Macht die UART selbst mit RXEN und TXEN >- UART aktiviert und richtig eingerichtet? Kann man an Hand des Datenblatts überprüfen >- eventuell konkurrierende Peripherie dediziert deaktiviert? Gibt es nicht. Wie kann man eigentlich so viel Stuss erzählen? @to >Dann habe ich das Programm von hier: >http://hekilledmywire.wordpress.com/2011/01/05/usi... >... >Was ist da nur falsch..? Du liest kein Datenblatt. MfG Spess
> #define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
Da schon mal versucht herauszufinden, was das bedeutet? Wenn du das
Makro nicht angepasst hast, dann hast du die falsche Baudrate.
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.