- Akku Tests und Balkonkraftwerk Speicher         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 32

Thema: Odometrie Problem [Hirn Fatal ERROR]

  1. #21
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Anzeige

    E-Bike
    Hallo pinsel120866,
    vielen Dank für dein fettes Lob.

    Ob das aber wirklich intelligent ist? Eher ein paar Jährchen Erfahrung.
    Und nur das fehlt ja listner. Alter: 17. Alle Achtung für die Energie in diesem Alter. Dito bei hai1991 mit gerade 16 Jahren. Bei Ceos tippe ich eher ne Ecke höher?
    listner, du schreibt ja, dass du gerne selber auf eine Lösung kommen willst.
    Und da stellt sich mir dann die Frage, ob ihr überhaupt so einen Vortrag haben wollt?

    Na, und wie lange ich da dran rumgetippert habe geht keinen etwas an .
    Wenn ich jetzt Gedanken lesen könnte, dann würde ich nach einem Link oder Titel fragen.

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    ich dachte ich hätt mein profil um die wichtigsten daten ergänzt sollte jetzt richtig sein!

  3. #23
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Hi Sternthaler,

    also wenn du mich fragst ob ich deine Vorträge will, kann ich nur sagen: JA, GERNE!

    Meine Gedanken drehen sich derzeit um dies:
    https://www.roboternetz.de/phpBB2/ze...27368&start=22

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.07.2005
    Alter
    33
    Beiträge
    128
    Hallo pinsel und hallo Sternthaler und die anderen natürlich auch
    ....
    Zitat Zitat von pinsel120866
    Gratulation - wie immer hochintelligent und humorvoll erklärt, noch dazu um diese Uhrzeit!
    ^^ dem stimm ich voll und ganz zu!!

    ...

    nun zu deinem post sternthaler:
    Zitat Zitat von Sternthaler
    Alle Achtung für die Energie in diesem Alter
    vielen dank!!

    Zitat Zitat von Sternthaler
    Und da stellt sich mir dann die Frage, ob ihr überhaupt so einen Vortrag haben wollt?
    ja, dein post ist mir sehr wilkommen,
    jedoch überschreitet er meine "programmiertechnische verständniss" aus- diesem grund möchte ich noch folgendes sagen, befor ich mit deiner idee rumexperimentiere:

    zu:
    Zitat Zitat von Sternthaler
    In deinem Kommentar hinter "huni=(x-(zehner*10+einer))/100;" schreibst du, dass du den %-Befehl nicht nutzen möchtest, da er zu viel Speicher brauchen würde.
    Du hast diesen Befehl aber schon bei der einer-Berechnung eingesetzt. Das bedeutet dann aber, dass der Programmspeicher für diesen Befehl schon benutzt/verbraucht wird. Dann macht es auch Sinn diese Funktion ruhig mehrfach zu benutzten.
    Speak to the hand Fazit: Entweder nie, oder möglichst häufig eine Funktion benutzen.
    d.h. is soll den modul befehl entweder garnix benutzen, oder ruhig mehrmals?? ... wird der benötigte speicher im IC nicht addiert?

    zu:
    Zitat Zitat von Sternthaler
    Was wäre, wenn in der Zahl Zehntausender drin wären?
    laut der Asuro Manual kann der wert nur im bereich 0-1023 liegen, aus diesem grund habe ich diese möglichkeit in erwägung gezogen...


    nundenn. jetzt werde ich erst mal versuchen meinen asuro nach Sternthalers vorschlag zum laufen zu bringen.. wen einem noh etwas einfällt. bitte melden ich werde schreiben, sobald ich entweder niederschläge erleide, oder einen schritt weiter binn =)

    gruß

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.07.2005
    Alter
    33
    Beiträge
    128
    boaa. ich raffs einfach nicht. ich hab bestimmt 2 std lang dein post gelesen.. aber meine c fähigkeiten reichen einfach nicht aus, um dies zu verstehen xD

    ausdiesem grund habe ich einfach mal die formeln zum berechnen der huni/zehner/einer usw. verändert. aber der gleiche ***** kommt raus.
    hier der neue code:

    Code:
    #include "asuro.h" // Odometrie test
    unsigned int data[2];
    unsigned char s[5] = "thze\0";
    
    	void PrintCharR(unsigned int x)
    	   {
    		  unsigned char einer, zehner, huni, tausend;
    		  x = data[1];
    		  
    		  tausend=x/1000;
    		  ///////////huni
    		  if(x>=1000)
    		  		  huni=(x-1000)/100;
    		  else
    				  x/100;
    		  zehner=(x-((tausend*1000)+(huni*100)))/10;
    		  einer=x-((tausend*1000)+(huni*100)+(zehner*10));
    				
    		  s[0]=tausend+'0';
    		  s[1]=huni+'0';
    		  s[2]=zehner+'0';
    		  s[3]=einer+'0';
    		  
    		  
    		  SerWrite(s,5);
    	   }
    	   
    
    int main(void)
    {
    	Init();
    	
    	//unsigned char a[5];
    	int i=0;
    	
    	while(1)
    	{ 								
    		OdometrieData(data); // aktuelle "Position der Odometrie einlesen
    		//a[5] = s[5];
    		
    		SerWrite("Rechte Odometrie testen: ",24); //Wert der rechten Odometrie Senden
    		PrintCharR(s);
    		SerWrite("\r\n\n",3);
    		
    		for (i=0; i<2000; i++)		//5 Sekunden Pause 
    			{
    				Sleep(72);
    			}
    	}
    	return 0;
    	
    }
    wäre nice, wenn mir das nochmal einer erklären könnte. wie ich das mit dem "m" weck kriege xD .. oder am besten wenn mir jemand die icq gibt. nicht dass das forum noch voll gespamt wird von mir mit (hilfe ich blicks nicht) trheads :P

    danke xD

  6. #26
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    zu dem modulo, wenn du einmal "etwas" benutzt wird der assemblercode auch nur einmal angelegt, und bei mehrfacher verwendung wird dann auch immer auf diesen "block" gesprungen, versuch die methode von hai1990 auf seite 1, die ist zwar auch etwas codeintensiv aber wenn du von den werten 0-1023 ausgehst isses in ordnung

  7. #27
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.07.2005
    Alter
    33
    Beiträge
    128
    hi,
    naja, so wie hai1990 habe ich es im prinzip im 2 versuch gemacht, es funktioniert dennoch nicht. ich habe beim besten willen keine ahnung, an was das liegne könnte
    wenn jemand den fehler erkennt hatt, bitte sagen
    gruß

  8. #28
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    da steht noch IMMER
    PrintCharR(s);

    du willst aber entwerder
    data[0] oder data[1] ausgeben .... ansonsten kannst du dir die if abfrage mit dem x >= 1000 sparen nimm lieber das exakte beispiel vom hai

    also
    Code:
    tausend = x/1000;
    hunni = (x-(tausend*1000))/100;
    zenher = (x-(tausend*1000 + hunni*100))/10;
    einer = (x-(tausend*1000 + hunni*100 + zehner*10))/10;
    EDIT dieser post wurde unter stresseinfluss (ich hasse diesen compiler) geschrieben, eventuelle unfreundlich wirkende aussage sind nicht so gmeint wie sie wirken

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.07.2005
    Alter
    33
    Beiträge
    128
    hi ceos und natürlich auch alle andere!!
    ich habe deinen post natürlich gut aufgefasst jeder ist mal im stress

    endlich habe ich das ergebnis bekommen, das ich so lange ersehnt habe =) *freu*

    könnte jedoch mir nochmal einer erklären, wie die wertübergabe verläuft, damit serwrite nun endlich den richtigen wert ausgibt? also das berechnen habe ich verstanden. aber nochmal kurzzusammenfassen, wiso/weshalb/warum ich nich direkt die werte der odo ausgeben kann

    hier der funktionierende code:
    Code:
    #include "asuro.h" // Odometrie test
    unsigned int data[2];
    unsigned char s[5] = "thze\0";
    
    	void PrintCharR(unsigned int x)
    	   {
    		  unsigned char einer, zehner, huni, tausend;
    		  x = data[1];
    		  
    		  tausend = x/1000;
    		  huni    = (x-(tausend*1000))/100;
    		  zehner  = (x-(tausend*1000 + huni*100))/10;
    		  einer   = (x-(tausend*1000 + huni*100 + zehner*10))/10;
    				
    		  s[0]=tausend+'0';
    		  s[1]=huni+'0';
    		  s[2]=zehner+'0';
    		  s[3]=einer+'0';
    		  
    		  
    		  SerWrite(s,5);
    	   }
    	   
    
    int main(void)
    {
    	Init();
    	
    	//unsigned char a[5];
    	int i=0;
    	
    	while(1)
    	{ 								
    		OdometrieData(data); // aktuelle "Position der Odometrie einlesen
    		//a[5] = s[5];
    		
    		SerWrite("Rechte Odometrie testen: ",24); //Wert der rechten Odometrie Senden
    		PrintCharR(data[1]);
    		SerWrite("\r\n\n",3);
    		
    		for (i=0; i<400; i++) 		//1 sec pause zwischen jedem erscheinen des odo-wertes
    			{
    				Sleep(72);
    			}
    	}
    	return 0;
    	
    }

  10. #30
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    in deiner print methode hast du
    x = data[1];

    zu viel drinne,
    das mit der wertübrgabe überlass ich jemand anderen, vll. schreib ich heut nachmittag was dazu aber im moment würde ich nur unverständliches gebrabbel statt ner handfesten erklärung hinbekommen

    kurzfassung "data" ist ein array, der bezeicher "data" ist gleichzeitig ein pointer auf den anfang des array, mit den eckigen klammern dahinter greifst du auf die werte des array zu, ACHTUNG indizes starten bei 0 und hören bei n-1 auf wobei n die größe des array ist

    deklariert wird ein array entweder
    char meinarray[5]; damit habe ich ein array von 5 char index also 0-4

    oder

    char meinarray[] = "blabla"; hier legt der compiler die größe fest, und zwar 7 nicht 6 !!!! ein asgeschriebener string endet nämlich auf eine binäre 0, also hat "blabla" 7 zeichen
    möchtest du die größe eines array erfahren kannst du

    sizeof(meinarray);

    aufrufen und erhälst die anzahl an speicherplätzen im array

    wenn dein array aus word (2 bytes) besteht, bekommst du zwar für
    word myarray[5];
    sizeof(myarray);
    eine 5 raus, aber im speicher liegen 10 byte!!!!
    wenn du einen pointer auf das array holst

    byte* mypointer = myarray;
    wird der compiler zwar warnen weil mypointer byte ist udn myarray word aber erfolgreich compilieren
    wenn du jetzt
    *(myarray+1) ODER myarray[1]
    aufrufst bekommst du den wert an dem index 1 (als an 2ter stelle)
    wenn du aber jetzt
    *(mypointer+1)
    benutzt, bekommst du das highbyte von wert 0 und das lowbyte von wert 1 als neuen wert vorgerechnet

    postscript: ih hoffe du hast verstanden was ich meine sonst editier ich das heut nachmittag wenn ich muse habe oder wer anders erklärts besser ^^

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad