Hex-Werte in Textdatei schreiben, wie

Gast #2787392
Lesenswert?

Bescxhreibe genauer, wass Du machen willst.

AVR Studio ist dazu gedacht, Programme für AVR Mikrocontroller zu 
scrheiben, die also nicht vom PC sondern vom Mikrocontroller ausgeführt 
werden. Sicher hat dein Mikrocomputer weder ein Betriebssystem noch ein 
entspreches Speichermedium (z.B. Festplatte). Darum hast Du auch keinen 
fopen() Funktion zur Verfügung.
Gast #2787393
Lesenswert?

JTAGice3 schrieb:
> Hallo zusammmen,
> möchte gern Sensordaten mit dem AVR Studio 5 in eine Textdatei schreiben
> und stoße auf das Problem, dass der Compiler fopen nicht kennt.
> Wie kann man alternative Textdateien öffnen?

was willst du?

mit dem AVR Studio 5 erzeugt man programme für einen µC diese kennen 
überhaupt kein Dateisystem - die haben oft nicht mal ein Betriebsystem.

mit dem AVR Studio 5 kann man bestimmt keine Sensordaten irgendwohin 
schreiben, das ist eine etwicklungumgebung!
Gast #2787405
Lesenswert?

Ich möchte zum testen meine Sensordaten, welche per SPI vom µC 
verarbeitet werden in eine Textdatei schreiben.

Hatte vollkommen vergessen, dass mein Entwicklungs PC nicht mit meinem 
µC verbunden ist (ausgenommen ISP-Schnittstelle zum beschreiben).
Gast #2787418
Lesenswert?

Besteht die Möglichkeit per UART in SPI Mode und nem RS232-USB converter 
die Daten vom Sensor direkt in meinen Entwickler PC zu bekommen welcher 
dieser dann in ein Textdatei schreibt?

Oder vielleicht was einfacheres?
Gast #2787424
Lesenswert?

JTAGice3 schrieb:
> Besteht die Möglichkeit per UART in SPI Mode und nem RS232-USB converter
> die Daten vom Sensor direkt in meinen Entwickler PC zu bekommen welcher
> dieser dann in ein Textdatei schreibt?

und wozu SPI? UART -> RS232 -> USB -> PC

> Oder vielleicht was einfacheres?

kommt darauf an was du da hast. Wenn dein µC netzwerk hat, kannst du es 
auch per netzwerk verschicken. Wenn du eine SD-Karte dran hast kannst du 
dort die Daten anlegen.
#2787431
Lesenswert?

@  JTAGice3 (Gast)

>Besteht die Möglichkeit per UART in SPI Mode und nem RS232-USB converter
>die Daten vom Sensor direkt in meinen Entwickler PC zu bekommen welcher
>dieser dann in ein Textdatei schreibt?

Kann man machen.

>Oder vielleicht was einfacheres?

Schreib deine Daten in den EEPROM, den kann man per ISP auslesen.
Gast #2787488
Lesenswert?

UART und SPI sind zwei völlig unterschiedliche Dinge. Du kannst eine 
UART Schnittstelle nicht im SPI Modus betreiben.

Warscheinlich möchtest Du Daten über die UARt Schnittstelle ausgeben, 
dann mit einem USB-UART (z.B. FT232 oder Silabs CP2201 oder Prolific 
PL2303) an den PC übertragen und dann auf dem PC mit einem Programm in 
eine Datei schreiben.

Schau Dich mal nach dem Begriff "Terminalprogramm" um. In Windows XP 
gibt es z.B.l das HyperTerminal, es kann die empfangenen Daten auch in 
eine Datei schreiben. Hammer Terminal kann das auch.

Richtig Komfortabel wird es aber erst, wenn Du Dir dazu ein Programm 
selbst schreibst. Unter Linux kann man das auch mit Board-Mitteln 
(Shell-Script) machen.
#2787492
Lesenswert?

JTAGice3 schrieb:
> spess53 schrieb:
>
>
>> Wie kommt denn SPI zum USB? Sag jetzt nicht Programmer.
>>
>> MfG Spess
>
>
> Was meinst du mit Programmer?
> Die Daten per ISP oder debugWire irgendwie in den PC über USB schicken?

MAAAN ordne mal deine Gedanken. Ist ja nicht zum aushalten. Was laberst 
du immer von SPI? Spess hat den Verdacht dass du meinst du könntest die 
Daten über deinen ISP-Programmer schicken (welcher mit dem Controller 
über SPI kommuniziert). DAS GEHT NICHT. Einfachste Möglichkeit (wurde 
aber auch schon gesagt, nur du ignorierst es), dein Controller sendet 
die Daten via USART, also seriell (RS232) und dein PC empfängt das 
entweder über eine native RS232 Schnittstelle (wenn vorhanden) oder du 
nimmst einen USB-RS232 Adapter, am besten direkt einen USB-TTL Adapter 
damit du keinen Pegelwandler am Controller brauchst.

Alternativ, wenn nur wenige Messwerte: Schreib sie in den EEPROM vom 
Controller, den kannst du einfach mittels deines Programmers auslesen 
und bekommst so die Daten.

Und wenn du mit diesen Infos nix anfangen kannst, dann fang kleiner an. 
Du würfelst hier alles durcheinander, hast keinen Durchblick. Ändere 
das!


gruß cyblord
#2787555
Lesenswert?

@JTAGice3 (Gast)

>Wäre das dann eine Echtzeitlösung?

Dein AVR liest die Daten per SPI aus dem Sensor und schickt sie nett in 
ASCII formatiert an den UART. Der wird per FT232 & Konsorten über USB in 
einen virtuellen COM-Port gewandlet und kann einfach per 
Terminalprogramm empfangen werden. Das Terminalprogramm kann die 
empfangene Daten in eine Textdatei schreiben. Fertig.
Gast #2787854
Lesenswert?

Danke für die ganzen Ideen.

Leider sind es viele Sensorwerte und der EEPROM hat nur 100k 
Schreibzyklen.
Das kann ich nicht machen.

Ich werd die Idee mit der UART und dem Terminalprogramm versuchen.
Gast #2787998
Lesenswert?

JTAGice3 schrieb:
> Ich werd die Idee mit der UART und dem Terminalprogramm versuchen.
Wenn du die Daten ein bisschen hübsch formatiert ausgibst, kannst du 
deine Werte evtl. z.B. mit LogView auch gleich als Live-Graphik 
verfolgen und nebenbei in eine Datei mitschreiben. Vom HEX-Format 
müßtest du dich dann allerdings wahrscheinlich verabschieden.
Gast #2792444
Lesenswert?

Hallo zusammen,

hab jetzt folgende Konstellation:

SPI Sensordaten an µC, per UART über UART-USB-Adapterkabel an USB-Port 
vom Entwickler PC mit Terminalprogramm.

Leider kommen falsche Hex-Daten an.

Daraufhin hab ich mir gedacht einfach ein einfaches UART-Programm zum 
Test zu schreiben und zu sehn, ob das Terminalprogramm immer noch 
falsche Daten anzeigt.

Dummerweise der Fall.

Liegt es vielleicht daran, dass ich lediglich die Tx Leitung an den PC 
weitergebe?
#2792456
Lesenswert?

JTAGice3 schrieb:

> Test zu schreiben und zu sehn, ob das Terminalprogramm immer noch
> falsche Daten anzeigt.
>
> Dummerweise der Fall.
>
> Liegt es vielleicht daran, dass ich lediglich die Tx Leitung an den PC
> weitergebe?

Nein.
Es liegt eher daran, dass dein Baudrate nicht stimmt.
Siehe die anderen Threads, die jetzt gerade zum gleichen Thema 'Hilfe, 
meine UART funktioniert nicht' laufen.
#2792516
Lesenswert?

JTAGice3 schrieb:
> Die Codezeilen initialsieren ihn als UART, so wie gewünscht.

Ganz sicher nicht. Mal davon abgesehen, dass UMSEL00 und UMSEL01 laut 
Deinem verlinkten Datenblatt im Register USCR0C liegen, solltest Du Dir 
mal anschauen, wie einzelne Bits gelöscht werden.

http://www.mikrocontroller.net/articles/Bitmanipulation#Standard_C_2

So wie Du es jetzt hast, zerschießt Du Dir den Inhalt des 
Konfigurationsregisters USCR0B.
#2792574
Lesenswert?

JTAGice3 schrieb:
> Kann man durch meine 2 Codezeilen das UCSR0B zerstören?
Kann schon sein.
Das sieht man aber sofort denn das brennt ein Loch ins Chipgehäuse.

Jetzt vergiss mal dieses Umsel-Zeugs. Das ist alles per default richtig 
eingestellt. Das einzige, was du einstellen musst ist die Baudrate und 
den Sender. Wenn es dann nicht geht, ist deine Baudrate falsch.

mfg.
#2792576
Lesenswert?

JTAGice3 schrieb:
> Kann man durch meine 2 Codezeilen das UCSR0B zerstören?

Keine Angst, damit kann man den Controller nicht zustören. Das das 
richtige Register UCSR0C ist, hast Du ja jetzt rausgefunden. Allerdings 
erklärt das nicht den beobachteten Fehler, denn zufällig führt auch 
Deine fehlerhafte Initialisierung, zu einer funktionierdenden UART.

Bleibt als wahrscheinliche Ursache, dass Dein Controller doch mit einer 
falschen Geschwindigkeit taktet.
#2792580
Lesenswert?

JTAGice3 schrieb:
> Wo aber liegt jetzt der Fehler?

Programm noch mal korrigieren.
Alle Bits in den richtigen Registern?
Sind die BIts überhaupt notwendig? Machen sie das (laut Datenblatt) was 
man möchte?

Stimmt die Baudrate? Ist die µC Frequenz richtig? Läuft der µC auch 
wirklich mit dieser Frequenz?

Irgendwo da hast du einen Fehler

(ich geh mal davon aus, dass der MAX232 wegen falscher Kondensatoren 
nicht in der Spannung einbricht. Kann man aber auch testen: µC aus dem 
Sockel. Mit einem Drahtstück Tx und Rx brücken und auf dem PC auf der 
Tastatur klimpern. Alles was man klimpert geht per Kabel bis zum Sockel 
und die Brücke schickt es gleich wieder zurück, so dass es angezeigt 
wird. Damit weiß man, dass die Hardware in Ordnung ist)

Und vergiss den Unsinn mit 'du hast den Chip geschrottet'. So schnell 
gehen die nicht kaputt.
Gast #2792586
Lesenswert?

Ich stelle im Terminalprogramm die richtige Baudrate ein, richtiges 
Frameformat.

Meine Baud Formel im Code ergibt 25, welches laut Datenblatt bei einem 
8MHz osc den Wert 25 haben muss.
Hatte sogar den Registerinhalt von 25 im UBRR0 anzeigen lassen.

Im AVR Studio 5 bei den Fuses steht bei
SUT_CKSEL:  INTCOSC_8MHZ_6CK_14CK_65MS

Ich erkenne daraus nur, dass er den internen mit 8MHz betreibt.
#2792594
Lesenswert?

JTAGice3 schrieb:

> Ich erkenne daraus nur, dass er den internen mit 8MHz betreibt.


Und zum gefühlt 6 Millionen 8 hundert tausend 3 hundert 5 und 
neunzigsten mal.

Es gibt keinen internen Quarz sondern nur einen internen RC-Oszillator. 
Und ob der mit 8Mhz schwingt oder ein paar Kiloherz daneben kann kein 
Mensch ohne Messinstrumente sagen. Spielt normal auch keine Rolle, 
ausser bei der UART.

Wenn du Glück hast, ist er nahe genug an den 8Mhz, so dass alles klappt 
auch ohne dass du ihn kalibrierst. Kann also sein, muss aber nicht.

Mit einem Quarz bist du auf der sicheren Seite.
Gast #2792651
Lesenswert?

cyblord ---- schrieb:
> Hat der Controller ne CLKDIV8 Fuse? Die muss raus. Sonst läuft er mit 1
> MHz statt mit 8.

Thomas Eckmann schrieb:
> Aber aus 0xEB wird beim Senden mit 1/8 der Empfängerbaudrate 0x80.

Hab jetzt die CLKDIV8 weggenommen, leider immer noch falsche 
Übertragung.

Statt 0xEB erhalte ich 0x0A.

Wenn man bei 0xEB = 11 1010 11b  die 2 Einsen links und rechts entfernt 
erhält man 1010b was zufällig 0x0A.

Ist das ein Zufall?
Gast #2793367
Lesenswert?

Thomas Eckmann schrieb:

> Dein Programm funktioniert. Nimm ein vernünftiges Terminalprogramm,
> stell die Baudrate richtig ein sende ein lesbares Zeichen.
>
> mfg.

Hab jetzt ein weiteres Terminal Programm probiert welches die gleichen 
Ergebnisse liefert wie Terminal v1.9.
Wenn ich mit dem Oszi vor dem Serial-USB Converter Kabel, also direkt am 
TX pin vom µC, erhalte die richtige Hex-Zahl, oder auch Buchstaben im 
8N1 Format.

Das Problem scheint also komplexer zu sein.
Anscheinend liegt es am Converter-Kabel.

Irgendjemand ne Idee?
#2793471
Lesenswert?

JTAGice3 schrieb:

> Das Problem scheint also komplexer zu sein.
> Anscheinend liegt es am Converter-Kabel.

Dann muss das aber defekt sein. Ein RS232/USB Konverter hat nur eine 
Aufgabe: von +12V RS232 (also nicht dem TTL Derivat) auf USB umzusetzen. 
Und bis jetzt hat das auch noch jeder Konverter gemacht. Wenn er es 
nicht tut, dann erfüllt er nicht seine Aufgabe und ist defekt.

> Irgendjemand ne Idee?

Irgendwie glaub ich nicht so recht an die 'Konverter-defekt' Hypothese. 
Praktisch immer stellt sich raus, dass das Timing falsch ist und zu 99% 
liegt das daran, dass der µC nicht mit der Taktfrequenz läuft, die der 
Programmierer glaubt und mit der er seine Konstanten ausgerechnet hat.
Gast #2793516
Lesenswert?

Karl Heinz Buchegger schrieb:

> Praktisch immer stellt sich raus, dass das Timing falsch ist und zu 99%
> liegt das daran, dass der µC nicht mit der Taktfrequenz läuft, die der
> Programmierer glaubt und mit der er seine Konstanten ausgerechnet hat.

Mein Oszi zeigt mir am Tx Pin vom µC das Richtige an.

Also muss es am Converter-Kabel liegen.
#2793815
Lesenswert?

JTAGice3 schrieb:
> Hab ich grad geprüft. Die Bitdauer entspricht ca. 52µs.
Dann weiß ich auch nicht mehr weiter.

Eine Sache macht mich stuzig:

JTAGice3 schrieb:
> Wenn ich mit dem Oszi vor dem Serial-USB Converter Kabel, also direkt am
> TX pin vom µC, erhalte die richtige Hex-Zahl, oder auch Buchstaben im
> 8N1 Format.

Was ist das für ein Konverterkabel? Übliche seriell-USB-Konverter können 
mit dem TTL-Pegel des AVR nichts anfangen. Dieser muß erst mittels 
MAX232 gewandelt werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren