mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD-Wandler mega169 (Butterfly)


Autor: jabber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe gestern schon den ganzen Tag verucht den Fehler zu 
finden aber ich bekomme es einfach nicht hin.
Vielleicht habt ihr ja ne Idee.

Ich habe das ganze schon vereinfacht zum testen.
Ich will eigentlich alle AD Kanäle messen aber erstmal würde ad0 Pin PF0 
reichen.
Da ich den Butterfly nehme und da der onbord NTC dran ist. Ich bekomme 
aber immer den Wert "1023" kann aber gleichzeitig an Pin PF2 wo 
eigentlich der LDR dran ist Spannungen messen.
Wenn ich dann AD1 nehme und die gleiche Spannung anlege dann bekomme ich 
als  Wert nur "6". Ich kann immer nur an dem pin PF2 messen egal welchen 
Kanal ich wähle.

An der Funktion habe ich nichts geänder und der Aufruf ist ja nichts 
wildes.
uint16_t ReadChannel(uint8_t mux)
{
  uint8_t i;
  uint16_t result;
 
  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
                               // setzen auf 8 (1) und ADC aktivieren (1)
 
  ADMUX = mux;                      // Kanal waehlen
  ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen 
 
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
  while ( ADCSRA & (1<<ADSC) ) {
     ;     // auf Abschluss der Konvertierung warten 
  }
  result = ADCW;  // ADCW muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.
 
  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
  result = 0; 
  for( i=0; i<4; i++ )
  {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
    result += ADCW;        // Wandlungsergebnisse aufaddieren
  }
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
 
  result /= 4;                     // Summe durch vier teilen = arithm. Mittelwert
 
  return result;
}
 
int main(void)
{
  uint16_t ad0, ad1, ad2;
  char ad0_str[10], ad1_str[10], ad2_str[10];
while(1)
{ 
  ad0 = ReadChannel(0); 
  ad1 = ReadChannel(1); 
  ad2 = ReadChannel(2);

utoa(ad0,ad0_str,10);
utoa(ad1,ad1_str,10);
utoa(ad2,ad2_str,10);

LCD_puts(ad0_str,1);
}  
}

Autor: jabber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe in dem Butterfly GCC code folgendes gefunden.
// To save power, the voltage over the LDR and the NTC is turned off when not used
    // This is done by controlling the voltage from a I/O-pin (PORTF3)
    sbiBF(PORTF, PF3); // mt sbi(PORTF, PORTF3);     // Enable the VCP (VC-peripheral)
    sbiBF(DDRF, DDF3); // sbi(DDRF, PORTF3);        

    sbiBF(ADCSRA, ADEN);     // Enable the ADC

cbiBF(PORTF,PF3); // mt cbi(PORTF, PORTF3);     // disable the VCP
    cbiBF(DDRF,DDF3); // mt cbi(DDRF, PORTF3);  
    
    cbiBF(ADCSRA, ADEN);      // disable the ADC


Was macht denn sbiBF? Ich kann das nirgends finden und beim Combilieren 
kommt da ein Fehler.

Ich arbeite ja eigentlich garnicht mit dem Butterfly code, also dürfte 
der pin ja nicht disable sein, oder ist das in der Hardware so gebaut 
das die immer disabeld sind?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.