PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Ideen zum Quellcode



Tobias Stosius
17.05.2011, 14:29
Hallo,

ich habe folgende Idee:
Der ASURO ermittelt zu beginn verschiedene Helligkeitswerte:
- ASURO steht genau auf der Linie (Ein Transistor Links der andere Rechts daneben)
- ASURO weicht nach links ab (Der linke Transistor befindet sich über dem Hintergrund der Rechte auf der schwarzen Linie)
- ASURO weicht nach rechts ab (Der linke Transistor steht jetzt auf Schwarz, der Andere auf Weiß)

Der ASURO soll sich alle Werte merken und dann später beim fahren seine aktuellen Messergebnisse mit denen von der Konfiguration vergleichen. Stellt er eine Abweichung fest korrigiert er mit einem bestimmten Wert gegen.


#include "asuro.h"
int VARIABLE FÜR MESSWERT auf der Bahn
int VARIABLE FÜR MESSWERT links daneben
int VARIABLE FÜR MESSWERT rechts daneben
int (main) void
--------------------------------------------------------
Wert AUF der Bahn messen....
in variable einfügen

Wert LINKS neben der Bahn messen...
in Variable einfügen
--------------------------------------------------------
Wert Rechts neben der Bahn messen...
in Variable einfügen
--------------------------------------------------------

Jetzt losfahren und aktuelle Helligkeit messen
Bei Abweichung entsprechend Gegenlenken (evtl. kann man sich eine Formel aus den Messergebnissen zusammen bauen)


Ich hoffe jemand hat eine Idee wie man das umsetzten kann, leider habe ich nicht die Programmier Kenntnisse um das um zu setzten, hab zwar angefangen aber naja....

radbruch
17.05.2011, 15:57
Hallo

Ganz wichtig finde ich eine kleine Verzögerung nach dem Einschalten der FrontLED, weil auch LEDs nicht schlagartig hell werden. Zusätzlich sollte man mehrfach einlesen um "Ausreiserwerte" zu eliminieren:


#include "asuro.h"

// PrintChar-Funktion nach izaseba (mit int-Parameter)
void PrintChar(unsigned int x)
{
char ergebnis[] = {'0','0','0','0'};
while (x >=1000){
ergebnis[0]++;
x -=1000;
}
while (x >=100){
ergebnis[1]++;
x -=100;
}
while (x >= 10) {
ergebnis[2]++;
x -=10;
}
ergebnis[3] +=x;
SerWrite(ergebnis,4);
}

int main(void)
{
unsigned int werte[2], data[2];

Init();
FrontLED(ON);
Sleep(100);
while(1)
{
LineData(data);
werte[0]=data[0];
werte[1]=data[1];
LineData(data);
werte[0]=(werte[0]+data[0])/2;
werte[1]=(werte[1]+data[1])/2;
PrintChar(werte[0]);
SerWrite("-", 1);
PrintChar(werte[1]);
SerWrite("\n\r", 2);

werte[0]=500;
while(werte[0]--) Sleep(72);
}
return(0);
}(ungetestet)

Ausgabe von Linienwerten: https://www.roboternetz.de/community/showthread.php?35045-LineData()-auslesen
Noch mehr Werte: https://www.roboternetz.de/community/showthread.php?26143-Vollausschlag-f%FCr-die-Fotosensoren&p=246414&viewfull=1#post246414

Vielleicht reicht dir das schon für erste Versuche.

Gruß

mic

[Edit]Diagramm für getunte LineLED:
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=1381
Mit der orginalen Led sind die Werte bedeutend kleiner. Ein Vorteil hoher Werte wurde allerdings bisher noch nicht beschrieben ;)

Ceos
17.05.2011, 16:30
also ich habe einfach defferenziell gemessen (ohne pause beim ein und ausschalten, da verstreicht genügend Zeit bis der das setup für den ADC hinter sich gebracht hat)
quasi LED-An, messen, LED-Aus, messen, Differenz bilden (dunkel = niedrige Differenz, hell = hohe Differenz) . So ist man sogar gegen Fremdlicht geschützt (bis zu einem gewissen Grad), aber aufpassen, es könnten auch negative Differenzen auftauchen, wenn z.B. bei fast schwarzem Untergrund ein Fremdlicht im falschen Moment stört, also immer 'signed int' zum rechnen nehmen!

Tobias Stosius
22.05.2011, 14:30
Vielen Dank für die Hilfe. Für erste Test reicht es schon aus.

Damit nicht wieder ein neuer Thread entsteht poste ich hier mal noch eine Frage:
Mich würde interessieren, wie die Umwandlung vom Quellcode in eine -hex Datei funktioniert.
Ich weiß dass das mit diversen Tools geht, mich interessiert was dahinter steckt, also wie der Code in hexadezimale umgewandelt wird und
wie der Prozessor vom Asuro das dann ausliest. Hoffentlich kann mir da jemand helfen ;)

PicNick
23.05.2011, 07:51
Aus einem Quellcode (=text) Maschinencode zu erzeugen (in hex = binär), ist die Lieblingsbeschäftigung jedweden Compilers.
Ich glaub aber, dass du eigentlich die Umwandlung bzw. Ausgabe dieses binär-codes in eine ".HEX" File meinst.

Tobias Stosius
23.05.2011, 08:28
Ja,
die Umwandlung von dem Code in eine .hex Datei interessiert mich.

PicNick
23.05.2011, 09:11
Im Grunde werden das einfach Zeilen im lesbaren ASCII ( printf("%02.2X", ....
Adresse / ---- data-bytes--- / Prüfsumme

die details hab ich einmal gebraucht, weil ich für meine "HexHacker" diese Hex-Dateien einlesen wollte, danach aber ist das alles verblasst. Müsste ich nachsehen.

Zum Umwandeln nehm' ich den PonyProg, der kost' nix.

Tobias Stosius
23.05.2011, 09:26
Sorry aber leider komm ich nicht ganz dahinter was du meinst...
Hättest du eine Idee, nach was man da am besten googeln kann? Habe es selber schon versucht
war nur leider nie das richtige dabei.

PicNick
23.05.2011, 09:38
da ist z.B. das Hex-Format beschrieben:
http://www.rn-wissen.de/index.php/HEX-Datei#Internes

Tobias Stosius
23.05.2011, 10:05
Also wenn ich das alles richtig verstanden habe dann funktioniert die Umwandlung von dem Sourcecode in eine .hex Datei
indem er für jedes ASCII Zeichen einen bestimmten Hexadezimalcode schreibt oder?

Aber wäre das dann nicht total unsinnig? Ich meine wenn jedes Zeichen in ein Hexcode umgewndelt werden muss würde doch die .hex Datei am Ende
doch (im Verhältnis gesehen) riesen groß werden oder?

PicNick
23.05.2011, 11:04
...doch (im Verhältnis gesehen) riesen groß werden oder? ...
richtig.
aber als Text-datei ist das Zeugs beliebig als (z.B) Mail od. Attachment übermittelbar (und wird nicht vom Spam-Fuzzy gefressen)

und: die grösse, die bei µC-programmen erreicht wird, ist zu vergessen.

Ich möcht natürlich nicht die täglichen Windows-Updates als Hex-File runterladen müssen :-)

Tobias Stosius
23.05.2011, 11:24
Okay,
dann hab ich alles verstanden ^^
Hat mich sehr gehülf

Ich möcht natürlich nicht die täglichen Windows-Updates als Hex-File runterladen müssen
Bring die Jungs von Microsoft doch nicht auf dumme Ideen :)

Valen
24.05.2011, 09:52
Vielleicht wird diese Seite deine Frage (ein bisschen) beantworten:

http://www.rn-wissen.de/index.php/Compiler

Tobias Stosius
25.05.2011, 14:18
Danke für die schnellen Antworten. Ihr habt mir sehr geholfen!

(Thema kann geschlossen werden)