- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Propleme bei mehreren ADC Eingänge

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Anzeige

    Powerstation Test
    Hallo,
    Zitat Zitat von damfino Beitrag anzeigen
    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);
    }
    Dem Compiler ist das .h oder .c total egal!
    Das ist nur eine Konvention und man kann als Dateiendung verwenden was das Dateisystem zu lässt.

    Genau genommen werden die #include-Dateien vom Präprozessor verwaltet.
    Im Prinzip macht dieser eine Art "search & replace", überall wo er #include findet löscht er dieses und kopiert die angegebene Datei rein.
    Der Compiler bekommt dann diese aufgeblasene Datei gefüttert.

    Früher, als der Präprozessor noch ein eigenständiges Programm war, hat man den gerne auch z.B. in der Textverarbeitung eingesetzt.
    Man konnte dann einzelne Kapitel als eigene Dateien verwalten und mit den entsprechenden #includes dann das Buch zusammenstellen.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #12
    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.

  3. #13
    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 !

  4. #14
    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

  5. #15
    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 !

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    897
    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.

  7. #17
    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 20:15 Uhr)

  8. #18
    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 !

Seite 2 von 2 ErsteErste 12

Ä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, 13:31
  2. ADC bei TC1796b
    Von comingone im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 11.08.2008, 20:22
  3. Propleme beim I2C-Bus Aufbau
    Von Bluesky im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 14.02.2007, 15:11
  4. ADC Eingänge schützen --- Hier ein Vorschlag
    Von Kaiser-F im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 22.12.2005, 15:13
  5. Kommastellen bei ADC
    Von Pfiff-1 im Forum PIC Controller
    Antworten: 5
    Letzter Beitrag: 06.08.2005, 22:20

Stichworte

Berechtigungen

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

12V Akku bauen