-         

Ergebnis 1 bis 8 von 8

Thema: ascii in int

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2006
    Beiträge
    8

    ascii in int

    Anzeige

    hallo

    ich habe da ein kleines prob auf das ich gestossen bin

    da ich nicht wirklich fit in c bin ... aber zumindest etwas davon rumzubrobieren...

    nun habe ich mit dem myavr bord (ATmega und dem prog
    myavr workpad plus ... es geschafft zei analoge eingänge
    zu nutzen und diese aufs diplay anzeigen zu lassen ...

    nur leider schmeist er mir ascii werte raus und dabei
    hätt ich doch so gerne zahlen zb

    adc1 -170.... 170
    adc2 -35.... 35

    adc laufen beide mit 10bit auflösung

    kann mir da wer helfen ???

    gruss vom übermüdeten sigbert

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Alter
    31
    Beiträge
    18
    Hallo

    Probiers mal mit
    Code:
    char c = 'A'; 
    int i = (int)c; // i enthält jetzt den Wert 65.
    oder für deinen Fall vielleicht besser geeignet:
    Code:
    //adc1 ist ja (anscheinend) schon als char deklariert, deshalb:
    int hilfsvar=int(adc1);
    ASCII-Werte gehen von 0 bis 255, also würde es mich interressieren was es dir für negative Werte welche ASCII-Zeichen ausgibt.
    lg Matthias

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    Hi,

    auch nach der oben genannten Methode wirst du ASCII-Zeichen auf dein Display bekommen. (Die Methoden oben ändern nämlich irgendwie nichts, außer, dass er Probleme bekommen wird, sobald "(adc1 > 127) == true" gilt, da int (hier wohl als 8-bit zu verstehen) nur bis 127 geht.)

    Was du brauchst: eine Methode ASCII -> BCD.
    Dann addierst du jeweils 48 dazu. Die einzelnen Zahlen gibt's du dann hintereinander auf dem Display aus.

    (Für Umwandlungsfunktionen siehe: http://www.avr-asm-tutorial.net/avr_...onversion.html)

    Gruß, CowZ

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2005
    Beiträge
    141
    Hallo Siegbert,

    ich habe mir einfach mal das Beispiel "LCD_Balken" aus dem Workpad genommen und etwas abgeändert:

    Code:
    //---------------------------------------------------------------------------
    // Title      : Wandelt ein analoges Signal und gibt es auf LCD aus
    //---------------------------------------------------------------------------
    #define 	F_CPU 3686400
    #include	<avr\io.h>
    #include	<util\delay.h>
    #include	<stdio.h>
    
    // ... 
    
    int main (void)
    {
    	wait_ms(200);
    	lcd_init();
    	while (true) // Mainloop
    	{
    		char buffer[20]={0};		
    		unsigned int adc;
    		//.....................
    		adc=read_ADC(0);
    		sprintf(buffer,"ADC 0 = %i",adc);		
    		lcd_goto(1,1);
    		lcd_write(buffer);
    		//.....................
    		adc=read_ADC(1);
    		sprintf(buffer,"ADC 1 = %i",adc);		
    		lcd_goto(2,1);
    		lcd_write(buffer);
    		//.....................
    		wait_ms(200);
    	}
    return 0;
    }
    Das Beispiel findest du links im Assistenten unter Vorlagen->LCD. Ich denk mal das ist es was du tun wolltest oder?

    Gruß Jahn

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2006
    Beiträge
    8
    na da schau ich doch gleich mal was ich damit so alles anfangen kann

    ich habe auch dden balken genommen und halt etwas verändert und verdoppelt ...
    wenn das hinhaut .. bin ich schon ein stk weiter .. und habe vllt noch weitere fragen ...
    na da schaun ich jetzt mal was es so alles macht

    gruss sigbert

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2006
    Beiträge
    8
    hi habe mit dem code jetzt etwas rumspielen können und ich bekomme jetzt tatsächlich das was ich möchte ... zahlen .. juhuuuu

    jetzt aber die fragen die sich daraus wieder ergeben haben ...

    wenn ich das poti auf maxwert stelle dezimal jetzt 1019 auf meinem display
    und dann wieder zurückgehe gibt er mir richtig grosse werte raus
    weit über die 8000 auch lässt er sich nicht auf 0 zurückdrehen
    wenn ich aber den funktion lcd_clear () mit einbinde ist alles so einstellbar wie ich es erstmal gerne hätte ... nur stört jetzt das flackern bzw der ständige neuaufbau des lcd

    dann noch ne kleine frage
    da ich ja auch dieses beispiel LCD_BALKEN am verändern und benutzen bin
    wo kann ich die abtastrate also die 10bit abtastung verändern
    und wie kann ich jetzt mit den werten bevor ich ans lcd gehen rechnen
    damit ich meine negatitven werte bekomme

    gruss sigbert

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2005
    Beiträge
    141
    hallo siegbert,

    oh man, mach langsam und lerne auch die C-Grundlagen
    klar kannst du rechnen, warum denn nicht...
    die adc werte liegen bei 10 bit zwischen 0 und 1023
    wenn du symetrische werte um den nullpunkt haben möchtest ziehst du einfach die häfte von 1023(bzw. 1024) ab

    Code:
    ...
    int adc;
    adc=getADCValue();
    adc=adc-(1024/2); oder adc=adc-512;
    sprintf(buffer,"adc = %i",adc);
    lsd_write(buffer);
    ...
    das die darstellung auf dem lcd lso komisch ist liegt daran dass alte ziffern stehen bleiben ohne lcd_clear gehts auch indem einfach ein paar leerzeichen am string hinten dran sind :

    Code:
    sprintf(buffer,"adc = %i    ",adc);
    gruß Jahn

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2006
    Beiträge
    8
    erstmal ein riesen grossen dank an dich .. habe jetzt mein kleines
    projekt fürs display fertig .. und das dank deiner bzw eurer hilfe

    das mit dem rechnen da war ich mir nicht ganz sicher wegen dem
    umformen der werte ... das man grundsätzlich rechnen kann
    weiss ich .... bin halt noch nicht so erfahren ...

    aber ich mache weiter und wer weiß vllt kann ich ja auch mal jemandem helfen

    viele grüsse und nochmaligen dank sigbert

Berechtigungen

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