Hallo, aus den vielen hier schon vorgestellten Projekten bzgl. Speicherung von GPS-Daten auf einer SD-Karte, habe ich mir einen eigenen Code zusammengebastelt, der wirklich nur das speichern soll, was das Modul sendet, und nicht noch die Daten vorverarbeiten oder irgendwelche anderen Servoausgänge etc. abfragen soll. Das schreiben auf der SD-Karte an sich funktioniert auch und das Modul sendet auch korrekte NMEA-Daten (mit Pegelwandler an RS323 überprüft), doch wenn ich diese dann mit dem ATmega8L abfrage und auf die Karte schreiben möchte, kommt nur Mist raus. Ich bin nun mir meinem Latein am Ende, wo ich noch den Fehler suchen könnte. In den vielen anderen Threads war schon die Rede von einer evtl. falschen Baudrate, aber ich habe sie schon mehrmals überprüft. Das Modul sendet mit 9600. Kurz zur Beschaltung des ATmega: PB0 -> LED PD3 -> Taster RX/TX -> jeweils das Gegenstück des GPS-Moduls Und die SD-Karte eben als SPI. Wie gesagt, Schreiben an sich geht auch. Warhscheinlich nur ein blöder Anfängerfehler. :/
Da das GPS nur sendet, wird das TX des Uarts nicht verwendet und kann also zum debuggen verwendet werden. Haengs an den PC, und sende erst die empfangenen Strings, dann die verarbeiteten Strings
Es soll nichts verarbeitet werden. Einfach nur das, was das Modul sendet auf die SD-Karte schreiben.
>In den vielen anderen Threads war schon die Rede von einer evtl. >falschen Baudrate, aber ich habe sie schon mehrmals überprüft. Das Modul >sendet mit 9600. Sicher tut es das. Aber empfängt dein AVR auch mit der richtigen Baudrate? Sieht jedenfalls nicht so aus.
Nein, ich möchte es eigentlich über den internen Oszillator regeln. Oder überfordere ich den Atmega8L damit komplett?
holger schrieb: > Sicher tut es das. Aber empfängt dein AVR auch mit > der richtigen Baudrate? Sieht jedenfalls nicht so aus. Da wäre dann meine Frage, was ich an der Berechnung falsch gemacht habe. ;)
Moritz P. schrieb: > Nein, ich möchte es eigentlich über den internen Oszillator regeln. Oder > überfordere ich den Atmega8L damit komplett? Die Frage ist, ob der interne Oszillator auf eine Abweichung kleiner 2 Prozent kalibriert werden kann.
Der interne Oszillator kann gegen einen 32kHz Quarz laufen gelassen werden.
Hi >Der interne Oszillator kann gegen einen 32kHz Quarz laufen gelassen >werden. Dann kann man auch gleich einen richtigen nehmen. Ist wesentlich einfacher. MfG spess
Eir richtiger Quarz ist einfacher, benoetigt aber mehr Strom.
Gehe ich richtig in der Annahme, dass der mit 8MHz läuft? Laut Datenblatt ergibt sich dann für eine Baudrate von 9600 und 8MHz ein Fehler von 0,2% bei einem UBRR-Wert von 103 (asynchrone Kommunikation).
HI
>....benoetigt aber mehr Strom.
Dürfte bei GPS-Empfänger und SD-Karte kaum bemerkbar sein.
MfG Spess
Pico Oschi schrieb: > Eir richtiger Quarz ist einfacher, benoetigt aber mehr Strom. Verwirrt den armen Jungen nicht noch mehr. Ein normaler Quarz und fertig! Prinzipiell ließe der ATMega8L sich kalibrieren, aber das ist ziemlich knapp, da die Temperatur z. B. nicht zu stark schwanken darf, die Spannung konstant gehalten werden muss und altern darf der Chip auch nicht zu schnell. Also Quarz.
Moritz P. schrieb: > Gehe ich richtig in der Annahme, dass der mit 8MHz läuft? > Laut Datenblatt ergibt sich dann für eine Baudrate von 9600 und 8MHz ein > Fehler von 0,2% bei einem UBRR-Wert von 103 (asynchrone Kommunikation). Moritz, das Problem ist der 8 MHz RC-Oszillator. Der ist von Haus nicht genau genug. Der kommt mit 7,5 oder 8,5 MHz zu dir. Du kannst ihn zwar kalibrieren, aber ... (siehe oben).
Mh, okay. Sind die internen Oszillatoren von den "größeren" ATmega's genauer? Und dann vielleicht jetzt noch einen kleinen Tipp welche Frequenz ich nutzen sollte und wo ich mich schnell über die Programmierung mit einem externen Quarz informieren kann. ;)
>>HI >>....benoetigt aber mehr Strom. >Dürfte bei GPS-Empfänger und SD-Karte kaum bemerkbar sein. > >MfG Spess Doch. Denn eine stationaere Anwendung mit Netzteil ist das ja sicher nicht. Eine stationaere Loesung muss kein GPS laufen lassen. Also portabel, also ab Batterie. Nein ? Das bedeutet mit Sleepstates arbeiten, auch beim GPS.
>Gehe ich richtig in der Annahme, dass der mit 8MHz läuft? Wenn der AVR neu ist und du die Fuses nicht auf 8MHz gestellt hast, dann läuft der mit 1MHz. F_CPU im Code einzugeben führt nicht automatisch dazu das die CPU auch mit 8MHz läuft. Also schau mal nach mit welchem Takt sie wirklich läuft. Lass mal ne LED blinken.
Hi >Mh, okay. Sind die internen Oszillatoren von den "größeren" ATmega's >genauer? Nein. >Und dann vielleicht jetzt noch einen kleinen Tipp welche Frequenz ich >nutzen sollte und wo ich mich schnell über die Programmierung mit einem >externen Quarz informieren kann. ;) Am besten einen Baudratenquarz. Anschluss nach Datenblatt und Fuses umstellen. >>>HI >>>....benoetigt aber mehr Strom. >>Dürfte bei GPS-Empfänger und SD-Karte kaum bemerkbar sein. >> >>MfG Spess >Doch. ... Und wie viel macht es denn aus? MfG Spess
Also. Das Skytrack zieht minimal 25mA. Wenn Batterielaufzeit wichtig ist, sollte man das GPS schlafen legen, wenn man's nicht grad braucht. Allenfalls genuegt eine Messung pro minute. Der Mega8L zieht active @4MHz, 3V 5mA active @8MHz, 5V 15mA idle @4MHz, 3V 2mA idle @8MHz, 5V 7mA vielleicht sollte man einen speziellen Lowpower controller einsetzen. zB einen 164P active @1MHz, 2V 0.4mA active @4MHz, 3V 2.1mA active @8MHz, 5V 7.4mA idle @1MHz, 2V 0.15mA idle @4MHz, 3V 0.7mA idle @8MHz, 5V 1.9mA powersave mode 32kHz osc 1.8V 0.5uA 32kHz osc 3V 0.6uA powerdown mit WDT 3V 4.3uA ohne WDT 3V 0.2uA Gewisse powersave modes sind nur mit dem 32kHz quarz erreichbar. Die Frage ist dann einfach wie gross und schwer darf/muss die Batterie sein, welche Laufzeit ist gewuenscht.
Das ganze soll in ein Modellflugzeug und da dann von dem internen Flugakku mitversorgt werden. So kritisch ist es da nicht mit der Stromaufnahme. holger schrieb: >>Gehe ich richtig in der Annahme, dass der mit 8MHz läuft? > > Wenn der AVR neu ist und du die Fuses nicht auf 8MHz > gestellt hast, dann läuft der mit 1MHz. F_CPU im Code > einzugeben führt nicht automatisch dazu das die CPU > auch mit 8MHz läuft. Also schau mal nach mit welchem > Takt sie wirklich läuft. Lass mal ne LED blinken. Aha, da haben wir es schon. Ich sagte ja: Anfängerfehler. :D Laut Fuse Bits ist noch 1MHz eingestellt und das könnte auch mit dem Blinken der LED hinkommen. Jetzt habe ich mir nochmal das Datenblatt vorgenommen und da ist dann noch die Rede von OSCCAL. Kann ich die Frequenz entweder darüber oder über die Fuses setzen? Dann gebe ich dem internen noch eine zweite Chance, bevor ich einen externen nehme.
Hi Ich hatte nach dem Unterschied Interner Oszillator vs. Quarzoszillator im Stromverbrauch gefragt. Das der von der Frequenz und vom Mode abhängt ist hinglänglich bekannt. MfG Spess
>Kann ich die Frequenz entweder darüber oder >über die Fuses setzen? Über die Fuses. CKDIV8 muss deaktiviert werden.
>Hi > >Ich hatte nach dem Unterschied Interner Oszillator vs. Quarzoszillator >im Stromverbrauch gefragt. Das der von der Frequenz und vom Mode abhängt >ist hinglänglich bekannt. > >MfG Spess Der Unterschied liegt weniger im Verbrauch des Oszillators, wie in den moeglichen Sleep States. Mit 32kHz Clock kann man in den power down gehen, und zeitig wieder aufwachen. Dann wird der interne RC wieder angeworfen, und gut ist. Der RC ist viel schneller eingeschwungen wie ein normaler quarz. Das Ganze scheint sich aber erledigt zu haben. Die Laufzeit ist begrenzt und Stromsparen weniger Prioritaer.
Über die Fuses habe ich jetzt die 8MHz eingestellt, CKDIV8 gibt es nicht einzustellen. Die Ausgabe ist aber immer noch murks. Ich werde mich da wohl erst noch ein wenig einlesen müssen; ob man da noch mehr einstellen muss und wie es dann mit einem externen Quarz geht. Aber das muss bis morgen warten. Für heute habe ich schon genug Kopfschmerzen. ;)
Hi >Mit 32kHz Clock kann man in den power down gehen, und zeitig wieder >aufwachen. Dann wird der interne RC wieder angeworfen, und gut ist. >Der RC ist viel schneller eingeschwungen wie ein normaler quarz. >Das Ganze scheint sich aber erledigt zu haben. Die Laufzeit ist begrenzt >und Stromsparen weniger Prioritaer. > Dann wird der interne RC wieder angeworfen,... Habe ich jetzt irgendwie etwas verpasst? Den über die Fuses eingestellten Oszillator kann man per Software ab- , an- und umschalten? MfG spess
Schau mal einen lowpower Mega an. zB den Mega164P. Dort gibt es einen power save mode. Da laeuft der clock nicht mehr, nur noch ein 32kHz Quarz an an TOSC2. Es gibt auch einen Power down mode, da laeuft nichts mehr. Siehe Datenblatt Mega164P/324P/644P, seite 42 Wenn man dann einen Switcher, wie den TPS62202 fuer 1.8V, der hat einen eigenverbrauch von 12uA, hat, kommt man mit dem Systemverbrauch runter.
>Schau mal einen lowpower Mega an. zB den Mega164P. Dort gibt es einen >power save mode. Da laeuft der clock nicht mehr, nur noch ein 32kHz >Quarz an an TOSC2. Was hat das mit dem Problem einer falschen Baudrate zu tun? Wenn du dich mit Spess unterhalten willst dann tauscht E-Mail Adressen aus. Und hör auf hier das eigentliche Problem zu vernebeln.
Hi >Schau mal einen lowpower Mega an. zB den Mega164P. ... Stimmt. Habe mich bisher nicht sehr um Stromsparmodi gekümmert. Macht auch keinen Sinn, wenn der Rest der Anlage im mehrstelligen kW-Bereich liegt. >Was hat das mit dem Problem einer falschen Baudrate zu tun? >Wenn du dich mit Spess unterhalten willst dann tauscht >E-Mail Adressen aus. Und hör auf hier das eigentliche Problem >zu vernebeln. Mach dich doch wegen einem kleinen Nebenschauplatz, der jetzt beendet ist, nicht ins Hemd. Der TO hat doch alle Informationen bekommen, die er braucht. MfG Spess
>Was hat das mit dem Problem einer falschen Baudrate zu tun?
Die Anwendung im Flieger war nicht von Anfang an klar, daher war der
Sleep Mode auch ein Thema, das man bei GPS anschneiden sollte.
>Die Ausgabe ist aber immer noch murks.
Wie sieht die aus?
Ohne Zwischenpuffer am UART kannst du die Daten nicht
einfach so auf SD schreiben. Das dauert zu lange.
holger schrieb: >>Die Ausgabe ist aber immer noch murks. > > Wie sieht die aus? > > Ohne Zwischenpuffer am UART kannst du die Daten nicht > einfach so auf SD schreiben. Das dauert zu lange. Sieht im Prinzip immer noch so aus, wie in der Datei, die ich ganz am Anfang mit an den Post angehängt habe. Letztendlich lese ich die Daten ja auch zunächst in ein Array ein (per Interrupt) und schreibe sie dann auf die Karte (siehe main.c).
Da stimmt irgendwas mit der Baudrate nicht. Was wieder in den allermeisten Fällen auf eine falsche µC-Taktrate zurückzuführen ist. Ich würde dir empfehlen, diesen Punkt erst mal unabhängig vom GPS Modul zu klären. Lass deinen µC über die UART an einen PC senden und schau dir im Hyperterminal (oder sonst einem Terminalprogramm an) wn, was da kommt. Das wird dann debuggt, bis du am PC bei der im AVR eingestellten Baudrate auch tatsächlich das empfangen kannst, was du am AVR wegschickst. Ein derartiges Szenario geht unmittelbarer und einfacher zu debuggen als dein relativ kompliziertes Setup mit GPS Modul und SD Karte. Und erst dann, wenn das klappt wechselst du wieder zum GPS Modul. Wobei ich persönlich auch hier als ersten Schritt nehmen würde: Vom GPS empfangen, über UART an den PC weitergeben. Und wenn das dann klappt, dann wird auf SD geschrieben. Auf die Art fängst du mit einem recht einfachen System an und baust es bis zu dem Punkt aus, den du als dein Ziel definiert hast. Aber: Du ergänzt immer nur ein neues Teilsystem und kannst somit in den restlichen Bereichen auf bereits getestete Komponenten zurückgreifen.
So, mir ist ein wenig was dazwischen gekommen, aber habe ich mal wieder ein wenig testen können. Also, das Senden vom µC an den Computer und das Senden vom GPS-Modul an den Computer funktionieren einwandfrei, aber die Zeichen, die ich vom Computer an den µC und dann wieder zurück an den Computer sende, werden nicht korrekt dargestellt (bis auf die Umlaute, die scheinen keine Probleme zu haben^^). Daher nehme ich mal an, dass der Fehler irgendwie beim Empfangen am µC liegt, oder? Was kann ich da falsch gemacht haben? Die Schaltung sieht einfach so aus, dass ich vom Computer über einen Pegelwandler direkt an den entsprechenden Pin des µC gehe. Gehört da noch irgendwo ein Kondensator o.ä. dazwischen (den Pegelwandler habe ich natürlich laut Datenblatt ausreichend bestückt)? Oder liegt es doch an dem zu ungenauen internen Oszillator? Warum geht dann das Senden ohne Probleme? Nachtrag: Mir ist gerade noch aufgefallen, dass wenn ich z.B. ein a sende, nicht immer dasgleiche Zeichen wieder ankommt, sondern durchaus Unterschiedliche.
Hat keiner mehr einen Tipp für mich? Den Pegelwandler habe ich gerade nochmal getestet, an dem kann es nicht liegen. Kann es trotzdem an einer falschen Baudrate/Frequenz liegen, wenn die Senderichtung (vom µC aus) funktioniert? Wenn ich die Baudrate/Frequenz bewusst falsch einstelle, dann funktioniert (natürlich) auch das Senden nicht mehr korrekt.
Was spricht denn dagegen, mit einem quarz zu arbeiten. Ich wuerd mir nie die Arbeit machen es ueberhaupt mit dem internen Oszillator zu versuchen. Ein Quarz kostet nur 15 cents.
Hi >Oder liegt es doch an dem zu ungenauen internen Oszillator? Mit großer Sicherheit. > Warum geht dann das Senden ohne Probleme? Weil der Empfänger toleranter gegen Baudratenfehler ist. Nimm einen Quarz. MfG Spess
Nagut, dann will ich mich mal auf die Suche nach einem Quarz machen. Würde der hier gehen: http://www.reichelt.de/Quarze/7-3728-HC49U-S/index.html?ACTION=3&GROUPID=3173&ARTICLE=32844&SHOW=1&START=0&OFFSET=500&
Hi
>Würde der hier gehen:
Ja. Aber die Kondensatoren nicht vergessen.
MfG Spess
Natürlich nicht; habe ich gerade schon rausgesucht. Keramik-Kondensator, 22pF. Das lohnt sich ja mal wieder, für 50ct zum Laden zu fahren. ;)
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.