- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 18

Thema: Propleme bei mehreren ADC Eingänge

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Holomino Beitrag anzeigen
    Ich frag mal ganz dumm:
    while (ADCSRA & (1<<ADSC)) // warten bis ADC fertig

    muss da nicht ein Semikolon hinter? Soll doch warten, bis ADSC zurückgesetzt ist und dann erst die folgende Codezeile zum Lesen des AD-Wertes ausführen. Ohne Semikolon wird doch die folgende Zeile oder der durch {} eingefasste folgende Block mit dem while ausgeführt, oder bin ich jetzt ganz im falschen Film?
    Da rächt sich die "dumme" Angewohnheit, leere while-Schleifen in einer Zeile und ohne geschweifte Klammern zu schreiben.
    Code:
    ADCSRA |= (1 << ADSC);        // single conversion
    while (ADCSRA & (1 << ADSC)) // warten bis ADC fertig
    ADC_result = ADCW;
    //ADC_result += ADCW;
    da ist schlecht zu erkennen, was da abgeht, da nun auch noch der Kommentar dicht dahinter steht. Auch beim Lesen ist schlecht zu erkennen, daß es um einen Loop geht, insbesondere wenn man in ein paar Wochen an den Code noch mal ran muß. Und ohne Klammern wird da ganz schnell mal eine Semikolon reingeschrieben, obwohl die nächste Zeile eigentlich in die Schleife gehört. wenn man das grundsätzlich so schreibt:
    Code:
    ADCSRA |= (1 << ADSC);        // single conversion
    while (ADCSRA & (1 << ADSC)) { // warten bis ADC fertig
          ;
    }
    ADC_result = ADCW;
    //ADC_result += ADCW;
    passieren nicht so leicht Fehler und man kann ganz schnell noch einen Print zum Debuggen oder einen Nop für einen Breakpoint einfügen und auch wieder herauskommentieren, ohne daß die Programmstruktur kaput geht.

    In diesem Fall wird hier während der Konvertierung dauernd das Resultat ausgelesen, ob das dem ADC gefällt, weiß ich nicht.

    Zitat Zitat von damfino Beitrag anzeigen
    ]Meines wissens ist ein "int" nicht exakt definiert, es kann je nach Compiler ein short oder sonstwas sein.
    Es ist schon definiert, mindestens 16 Bit. Wenn aber die CPU schneller mit 64 Bit umgehen kann, kanns auch mal 64 Bit sein. Short ist da schon eher nicht definiert. Für einen Joystick reicht aber auch ein int8_t, selbst die Auflösung kann man mit den Fingern gar nicht erreichen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #2
    Benutzer Stammmitglied Avatar von Jackeder
    Registriert seit
    08.02.2015
    Ort
    Chemnitz, Germany
    Beiträge
    53
    Hallo erstmal und danke für die ganzen Antworten.

    Muss mich aber erstmal berichtigen, denn in dem Joystick sind nicht 50kohm Potis eingebaut sondern 100kohm Potis.
    Denke mal das damit auch mein Fehler sich erklären lässt, werde erstmal 2 10Kohm Potis verdrahten und diese dann messen, wenn das funktioniert ohne Propleme liegts am Joystick.

    - - - Aktualisiert - - -

    Zitat Zitat von damfino Beitrag anzeigen
    Du musst mal die Variablentypen gleich ziehen:
    es wird ein "double" mit "int" und "unsigned long" vermischt (Fließkommazahlen mit vorzeichenbehafteten Integer mit nicht vorzeichenbehafteten Integer), da sollte der Compiler doch schon einige Warnings anzeigen.
    Meines wissens ist ein "int" nicht exakt definiert, es kann je nach Compiler ein short oder sonstwas sein.

    Von der Rechengenauigkeit her kommst mit "short" Variablen oder "int16_t" aus, die haben einen Zahlenbereich von −32.768 bis +32.767.

    dtostrf: schaut etwas knapp aus, probier mal mehr Speicher bereitzustellen (zB char ystr[6] )

    Add: AT8adc.h
    *.h bedeutet einen Header Datei, da steht schon sicher mal kein Code drinnen, sondern nur zB Definitionen von Funktionen: "extern void lcd_home(void);"
    erst in einer *.c Datei steht dann die genaue Funktion:
    void lcd_home(void)
    {
    lcd_command(1<<LCD_HOME);
    }

    So gesehen sollte das Programm nie funktionieren, oder ist es doch unter *.c gespeichert?

    LG!
    natürlich habe ich alles in einer Joystick.c datei gespeichert, aber da ich alles was den ADC angeht in der AT8adc.H geschrieben habe hab ich auch nur diese hier aufgelistet, kann aber gerne auch noch meine *.c vorzeigen, fals es erwünscht wird.

Ähnliche Themen

  1. Mehrere (unabhängige) ADC-Eingänge am 16F876 benutzen?
    Von PICBeginner im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 07.03.2009, 12:31
  2. ADC bei TC1796b
    Von comingone im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 11.08.2008, 19:22
  3. Propleme beim I2C-Bus Aufbau
    Von Bluesky im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 14.02.2007, 14:11
  4. ADC Eingänge schützen --- Hier ein Vorschlag
    Von Kaiser-F im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 22.12.2005, 14:13
  5. Kommastellen bei ADC
    Von Pfiff-1 im Forum PIC Controller
    Antworten: 5
    Letzter Beitrag: 06.08.2005, 21:20

Stichworte

Berechtigungen

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

12V Akku bauen