- Akku Tests und Balkonkraftwerk Speicher         
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
    Benutzer Stammmitglied Avatar von Jackeder
    Registriert seit
    08.02.2015
    Ort
    Chemnitz, Germany
    Beiträge
    53
    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?

    stimmt das Semikolon hab ich vergessen, sorry und danke ... wundert mich das ATmelstudio da nicht gemeckert hat ^^

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Jackeder Beitrag anzeigen
    stimmt das Semikolon hab ich vergessen, sorry und danke ... wundert mich das ATmelstudio da nicht gemeckert hat ^^
    Warum sollte der Compiler meckern? Syntaktisch ist das Programm ja in Ordnung: wenn man keine Klammern setzt, wird die auf das while() folgende Anweisung solange ausgeführt, bis der Audruck im while() false wird. Wenn da nichts weiter passieren soll, muß dort das C-Equivalent eines NOPs stehen, nämlich das Semikolon. In deinem Code steht aber das Lesen des ADC-Resultats, und das macht er dann auch im Loop. Das ist zwar sinnloser aber gültiger Code.

    Eine Hilfe ist, sich den Code automatisch von der IDE formatieren zu lassen. An der Einrückung hätte man das sofort gesehen.

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

  3. #3
    Benutzer Stammmitglied Avatar von Jackeder
    Registriert seit
    08.02.2015
    Ort
    Chemnitz, Germany
    Beiträge
    53
    Es lag wirklich an dem Semikolon, messe beide ADC Eingänge im Abstand von 50ms ohne Störungen. Somit würde ich meinen Thema als erledigt, danke .

    naja Atmelstudio meckert bei mir meist wenn ich irgendwo in einer Zeile ein Semikolon vergesse zum Satzende, scheint bei einer While-Schleife warscheinlich eine Ausnahme zu sein ... wieder was dazugelernt

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Jackeder Beitrag anzeigen
    naja Atmelstudio meckert bei mir meist wenn ich irgendwo in einer Zeile ein Semikolon vergesse zum Satzende, scheint bei einer While-Schleife warscheinlich eine Ausnahme zu sein ... wieder was dazugelernt
    Du hast offensichtlich meinen Text nicht gelesen. Das Semikolon ist ja da:


    Code:
    	ADCSRA |= (1<<ADSC);        // single conversion
    	while (ADCSRA & (1<<ADSC)) // warten bis ADC fertig
    		ADC_result = ADCW; <------------- Semikolon 
    	//ADC_result += ADCW;
    Nur steht es leider hinter der Anweisung, die ADCW liest. Ein Semikolon ohne Anweisung davor ist ein NOP in C, und das wolltest du.

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

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    887
    Jo, C kann schon ganz schön fies sein

    Wenn's jetzt rennt, is' ja schön. Hab ich meine Pfadfindermission für heute erfüllt.

  6. #6
    Benutzer Stammmitglied Avatar von Jackeder
    Registriert seit
    08.02.2015
    Ort
    Chemnitz, Germany
    Beiträge
    53
    hey
    sorry Klebwax,aber so langsam verstehe ich worauf du hinaus willst
    ADCSRA |= (1<<ADSC); // single conversion
    while (ADCSRA & (1<<ADSC)); <-- das Semikolon hat gefehlt, nach dem ich es gesetzt habe geht alles
    {
    // warten bis ADC fertig (also wenn ichs so schreiben würde muss ich das Semikolon hinter dem Wihle() weglassen)
    }
    ADC_result = ADCW; <------------- Semikolon
    //ADC_result += ADCW;
    Geändert von Jackeder (23.04.2015 um 19:15 Uhr)

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Jackeder Beitrag anzeigen
    hey
    sorry Klebwax,aber so langsam verstehe ich worauf du hinaus willst
    ADCSRA |= (1<<ADSC); // single conversion
    while (ADCSRA & (1<<ADSC)); <-- das Semikolon hat gefehlt, nach dem ich es gesetzt habe geht alles
    {
    // warten bis ADC fertig (also wenn ichs so schreiben würde muss ich das Semikolon hinter dem Wihle() weglassen)
    }
    ADC_result = ADCW; <------------- Semikolon
    //ADC_result += ADCW;
    Ich schreib das dann noch etwas anders, so wie das K&R mal angefangen haben: die öffnende Klammer auf die selbe Zeile wie das if oder while, dann einrücken, und die schließende auf die selbe Ebene wie das while. Die automatische Formatierung meiner IDE ist auch auf dieses Format eingestellt. Beispiel:
    Code:
    while (Bedingung) {
          Anweisung;
          print(....);       // zum Debuggen, kann schnell rauskommentiert werden
    }
    
    /* die Anweisung kann auch leer sein, trotzdem sieht man auf den ersten Blick
       dass hier eine Schleife ist */
    
    while (das Reday-Bit ist false) {
          ;     // einfach warten
    //      print(...);      // Debug, auskommentiert oder gelöscht
          Nop();         // später eingefügt, um einen Breakpoint zu setzen, wird wieder gelöscht
    }
    
    // am Ende sieht es so aus
    
    while (Bedingung) {  // warten bis ready
         ;  // Einrückung erkennt man auch beim schnellen Lesen / Scrollen
    }
    
    // das ist zwar equivalent zu 
    while (Bedingung) ;
    /* hier rutscht einem schnell ein fehlendes Semikolon durch und der Compiler kann einem da nicht helfen. */
    Das Ziel ist, daß man Code wie einen "Text" lesen kann, und sofort versteht, was gemeint ist. C ist zwar davon meilenweit entfernt, aber ein wenig kann man sich daran orientieren.

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

Ä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. [ERLEDIGT] 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
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad