PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Meßwerte in Tabellen ablegen und mit AVR zugreifen!?



sniper98
05.04.2004, 12:41
Hallo!

Ich habe vor eine Kennline von einem Triangulationssensor in Form einer Tabelle (Spannungs-/Entfernungsverhältnis) abzulegen und mit dem Controller drau zuzugreifen. Wie mache ich sowas mit C? Mit Assambler geht das recht einfach allerdeings möchte ich das ganze Programm mit C schreiben weil mir Assambler in vielen Punkten zu umständliche und zeitraubend ist.

Wer kan mir mal miit nem kleien Beispielquellcode weiterhelfen?

Danke !

DerInder
05.04.2004, 13:08
Hi,
handelt es sich bei deinen Sensoren um die allseits beliebten Sharp GP**?
dann braucht mann keine Tabelle sondern kann es direkt errechnen.
Schau mal hier: https://www.roboternetz.de/phpBB2/viewtopic.php?t=174

05.04.2004, 15:22
nein ist kei sharp...und leider nicht zu berechnen, ich brauche leider nen tabelle

Bender
05.04.2004, 20:18
Warum kombinierst du nicht C mit Assembler? Eine Assemblerroutine lässt sich doch in jedem(?) Compiler ganz simpel einfügen. Vor allem, wenn du schon weisst, wie du es in Assembler machen könntest. Und wahrscheinlich wäre es damit auch noch ein paar Takte schneller.

05.04.2004, 23:37
ich hsse leider nur Assambler wei die Pest..

Kjion
06.04.2004, 09:50
Vielleicht wäre auch der Compiler ganz interessant ?? Es gibt da nämlich verschiedene Methoden... ( Ist nicht mehr ganz standartkonform, da es sehr hardwareabhänig ist. )

MfG Kjion

06.04.2004, 15:55
hat denn niemand ein einfaches beispiel programm?

Kjion
06.04.2004, 16:01
was für ein Compiler ?? Für AVR-GCC kann ich dir ein Beispiel geben...

07.04.2004, 16:35
ja mit AVR-GCC...gibts noch andere :-)

Kjion
07.04.2004, 17:08
#include <avr/pgmspace.h>

prog_char text[3] = "bla";
prog_char zahlen[4] = { 123, 3, 7, 56 };

for (i=0;i<3;i++)
daten[i] = pgm_read_byte( &text[i] );

for (i=0;i<4;i++)
daten2[i] = pgm_read_byte( &zahlen[i] );

So in etwa sollte es funktionieren. Ansonsten empfehle ich die FAQ unter "How do I put an array of strings completely in ROM?" ;-)


..gibts noch andere
Schon, spontan fallen mir noch zwei andere ein ;-)

MfG Kjion

07.04.2004, 18:27
naja aber so richtig hilft mir das noch nicht, stelle mir das anders vor. Ich bekomme ja vom AD Wandler je nach dem ob ich 8 oder 10 BIt nehme ein Zahl von 0-ffH (8Bit) oder 0-3FF (10Bit)
Nur wie stelle ich denn konkret denBbezug her, dass, sagen wir, der Wert 1fH (oder auch z.B 2,3V) dann z.B 50cm entsprechen.

Kjion
07.04.2004, 18:39
Du legst dir ne Tabelle an mit 255 Einträgen ( mit 10-Bit wirds schwieriger ). Jeder Index entspricht dem entsprechendem AD Wert, die Zahl der eigentlichen Wert den du wissen willst.

Also irgendwie sowas :
prog_char zahlen[255] = { 123, 3, 7, 56 .... 234, 23 };
( Muss übrigens nicht alles in einer Zeile stehen. )

Dann nur noch über
entferung = pgm_read_byte( &tabelle[adwert] );
das ganze Auslesen.

Hoffe das war verständlich :-k
MfG Kjion

08.04.2004, 09:46
jo danke... hast mir sehr geholfen :-)