- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: probleme bei der übertragung mit dem befehl "serwrite

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    Anzeige

    E-Bike
    also erst ma ich finds echt klasse, dass du mir weiterhilfst - hätte sonst en dickes prob da der unterschied zwischen c auf einem microcontroller und java doch ein recht großer unterschied ist
    so ich hab jetzt ma in die datei "stdlib.h" reingeschaut - bin mir allerdings net sicher, ob ich des verstanden hab, da ich nicht ganz verstehe was "/c" darstellen soll

    sehe ich das richtig das itoa() folgende parameter hat:

    itoa ("das zu verwandelnde intzeichen", "die variable in der das asci- zeichen gespeichert werden soll", "die basis [in meinem fall 10]")

    ps: woher weis ich den generell welche datei welche funktionen enthält?
    (wie zum beispiel das uint8_t in der datei "inttypes.h" - ok hier ist der name selbsterklärend aber bei itoa() ist das für mich nicht ersichtlich)

    mfg sebastian

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    achja was ich noch vergessen hab - was bewirkt die funktion readline()
    du meinst doch linedata() oder ???

    mfg sebastian

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    woher weis ich den generell welche datei welche funktionen enthält?
    (wie zum beispiel das uint8_t in der datei "inttypes.h" - ok hier ist der name selbsterklärend aber bei itoa() ist das für mich nicht ersichtlich)
    Indem man z.B. Bücher liest, wobei itoa kein ANSI-Standard ist es wird wohl
    integer to aSCII heißen.
    Wenn man mit avr-gcc arbeitet soll man auch manual dazu lesen Guckst Du.
    Das Tutorial auf mikrocontroller.net was ich Dir oben gepostet habe, ist auch eine gute Referenzseite.
    Und die Dattenbläter zu dem µC sind auch ein muß, naja, wenn man die Funktionen von asuro.h benutzt, nicht so schnell, aber früher, oder später schon.

    itoa ("das zu verwandelnde intzeichen", "die variable in der das asci- zeichen gespeichert werden soll", "die basis [in meinem fall 10]")
    fast richtig, der zweite parameter muß aber ein Array sein bzw. zeiger darauf.

    Beispiel:

    Code:
    uint16_t zahl = 1000;
    uint8_t puffer[5];
    itoa (zahl,puffer,10);
    Danach hast Du in Deinem Array puffer[0] oder *puffer 0x31,
    puffer[1] oder *puffer+1 0x30 usw.
    Es ist wohl jetzt kein Problem das ganze an UART bzw serwrite zu schicken.
    Bedenke nur, daß der puffer Anzahl der zu erwarteten Zahlen + 1 groß ist, weil itoa noch ein "\0" hinten dran hängt.

    da ich nicht ganz verstehe was "/c" darstellen soll
    ???

    Ich hoffe, daß es so alles stimmt

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    hey also ich meinte net "/c", sondern "\c" - das wird in der datei stdlib.h verwendet
    achja noch was ganz anderes. was bedeutet denn "Danach hast Du in Deinem Array puffer[0] oder *puffer 0x31, puffer[1] oder *puffer+1 0x30 usw. " - ohje ich muss ja echt schwer von begriff sein roflomfg

    naja ich hab mich nochmal an einem programm versucht :



    Code:
    #include "asuro.h"
    #include "inttypes.h"
    #include "stdlib.h"
    
    int main(void)
    {
    
    uint8_t transistorenstring[5];
    uint16_t transistorenzahl[2];
    
    Init();
    
    FrontLED(ON);
    LineData(transistorenzahl);
    
    itoa(transistorenzahl[0],transistorenstring,10);
    
    
    SerWrite("links:",6);
    SerWrite(transistorenstring,4);
    
    
    while(1);
    return 0;
    }
    als ergebniss bekam ich "links:38(links:985links:38(links:38(links:54(link s:54(links:38(¾inks:»8€(links:38(" also irgendwas scheint da nocht net zu stimmen

    allerdings kam 38( bei messungen im dunklen heraus und 985 im hellen -spricht das system scheint schon zu funktionieren
    allerdings ist es merkwürdig, dass zu oft die selben werte eingelsen werden

    ich vermute ma das "(" dadurch entsteht, da der eingelsene wert eine stelle zu wenig hat


    ps: zu der zeile "uint8_t transistorenstring[5];" // bedeutet diese 5, dass 5 bits verwendet werden oder dass 5 dieser strings mit dieser deklaration deklariert werden??

    mfg sebastian

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    ohje ich muss ja echt schwer von begriff sein
    Naja das vielleicht nicht unbedingt, ich würd sagen, das ist alles Neuland für Dich.
    C ist auch nicht unbedingt ganz einfach für Einsteiger, oder Umsteiger
    Es wäre besser gewesen C von Grund auf zu erlernen, Du befindest Dich jetzt irgendwie in der Mitte...

    Das sieht doch schon gut aus, Dein Programm...
    Nur die Endlosschleife hätte ich nicht zum Schluß gesetzt, sondern nach FRONTLED(ON); etwa so
    Code:
    while(1){
    Linedata.....
    ....
    ....
    Serwrite....
    }
    Dann kriegst Du laufend die Werte angezeigt, klar ?

    Dieses \c ist eine Escapesequenz nur \c fand ich in keiner Liste
    Ich denke es ist da um den Text irgendwie zu Formatieren, aber mit welchem Programm ?
    Beachte es einfach nicht, vielleicht erklärt es uns jemand

    ich vermute ma das "(" dadurch entsteht, da der eingelsene wert eine stelle zu wenig hat
    Damit liegst Du schonmal richtig, damit liest Du über die Werte hinaus...
    Es liegt an der SerWrite Funktion, ich find sie Käse,mit der Länge, die man übergeben muß.

    Abhilfe schaft hier wieder eine weitere Funktion (wer hätte es gedacht) und sie heißt auch ziemlich einfach strlen(zeiger auf Dein String), zu finden in string.h...

    wenn Du jetzt also schreibst

    SerWrite(puffer,strlen(puffer));

    müßte es weg sein.
    Besser wäre natürlich eine Serwrite Funktion, die ohne Länge auskommt, sondern das Ende der Zeichenkette an dem "\0" erkennt.
    Wenn itoa schon mit Null terminiert, warum soll man es nicht nutzen.

    zu der zeile "uint8_t transistorenstring[5];" // bedeutet diese 5, dass 5 bits verwendet werden oder dass 5 dieser strings mit dieser deklaration deklariert werden??
    Weder,noch

    Sagmal, Du hast Erfahrung mit Java, gibt es bei Java keine Arrays ?

    Die Deklaration
    uint8_t transistorenstring[5] heißt :
    Lege ein Feld von 5 Elementen an und zwar vom Typ uint8_t (unsigned char) oder 0-255 also genau 1 Byte.

    Das Feld sieht z.B so aus:
    transistorenstring[0] = 1;
    transistorenstring[1] = 2;
    transistorenstring[2] = 3;
    transistorenstring[3] = 4;
    transistorenstring[4] = 5;

    Beachte, daß alles um eine Stelle nach unten rutscht.
    Wenn Du jetzt den Quatsch an eine Funktion übergibst, z.B. Serwrite
    übergibst Du einen Zeiger darauf und zwar zeiger auf das Erste Element

    Serwrite(transistor) könnte man auch schreiben
    Serwrite(&transistor[0])
    Die Funktion kann jetzt auf den Zeiger zugreifen und zwar mit dem sternchen womit man dann denn Inhalt des Speichers meint, worauf der Zeiger zeigt ( ist das kompliziert zu erklären )

    also etwa so:

    b = *transistorenstring++;

    Das ist jetzt aber Zeiger Arithmetik, kann man lieber in einem C-Buch nachlesen, bevor ich mir hier einen abbreche

    O weh, hab ich jetzt wieder ein Roman geschrieben


    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    yo die idee das einlesen in die while schleife einzubinden is ne clever idee

    zu der zeile "uint8_t transistorenstring[5];" // bedeutet diese 5, dass 5 bits verwendet werden oder dass 5 dieser strings mit dieser deklaration deklariert werden??
    ähm ich hab mich da wohl ein bissel falsch ausgedrückt - klar gibt es in java arrays wollte eigentlich nur wissen ob dieses array jetzt ein array vom typ string oder char is aber das hat sich ja jetzt geklärt

    wenn das mein lehrer liest steinigt er mich

    ok ich glaub, dass müsste so hinhauen - wird nachher gleich ma getestet

    hab mir jetzt auchn paar Bücher zu c programmierung aus der unibibliothek karlsruhe geholt
    so langsam steig ich hier durch

    danke für die unterstützung

    mfg sebastian

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    yopp hat funktioniert - ein dickes dankeschön

    folgender quelltext is dabei rausgekommen

    Code:
    #include "asuro.h"
    #include "inttypes.h"
    #include "stdlib.h"
    #include "string.h"
    
    int main(void)
    {
    uint8_t transistorstringrechts[4];
    uint8_t transistorstringlinks[4];
    uint16_t transistorenzahl[2];
    
    Init();
    
    FrontLED(ON);
    
    while(1)
    {
    
    LineData(transistorenzahl);
    
    itoa(transistorenzahl[0],transistorstringlinks,10);
    itoa(transistorenzahl[1],transistorstringrechts,10);
    
    SerWrite("links:",6);
    
    SerWrite(transistorstringlinks,strlen(transistorstringlinks));
    
    SerWrite("rechts:",7);
    
    SerWrite(transistorstringrechts,strlen(transistorstringrechts));
    
    }
    return 0;
    }

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Ist doch schön
    Es ist auch wirklich gut, daß Du Dir ein paar Bücher zu C besorgt hast, ohne das wird es nicht einfach sein...
    Nur noch einen Kompiler um aufm PC zu üben, und in ein paar Tagen lachst Du über Deine Probleme von Heute bzw. gestern.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    ja dann ^^
    nochmals vielen dank

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress