www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tiny13 ADC - Verzweiflung


Autor: Michael H. (overthere)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Es gibt ja schon Zahlreiche ADC-Beiträge für den Tiny13. Dort konnte ich 
aber meine Lösung nicht finden.

Problem ist, dass der ADC immer den gleichen in etwa Wert ausliest, egal 
welche Spannung anliegt.

Ich sehe leider den Fehler nicht, könnt ihr mir helfen?

Danke

Michael

Autor: Michael H. (overthere)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anhang vergessen...

Autor: hdd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code?

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltung?

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du setzt val=0;
also isses solange 0 bis du was anderes rein schreibst ...

Autor: Michael H. (overthere)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, val wird immer um eins erhöht. Bei Geraden ist der ADC Wert auf 
der Weisen LED, bei ungeraden ist er Null. Das habe ich nur gemacht, 
damit ich weiß, dass der ADC nicht hängt, oder dort in einer 
Endlosschleife steckt.

Schaltung: An ADC1 hängt die Spannungsquelle, an OC0A die weiße, an OC0B 
die gelbe LED.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:

> Schaltung: An ADC1 hängt die Spannungsquelle
edit: nix

Autor: Michael H. (overthere)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, unklar ausgedrückt: Es hängt die Spannungsquelle die gemessen 
werden soll.. (über einen Spannunsteiler, selbstredent!)

Autor: Michael H. (overthere)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt funktioniert's. Vielleicht liegt es daran, dass ich nur den 8 bit 
Mode verwenden wollte.

Der neue Code:

void adc_init(){
  ADMUX=(0<<REFS0)|(1<<MUX0);
  ADCSRA=(1<<ADEN)+(1<<ADSC)+(0<<ADPS2)+(0<<ADPS1)+(0<<ADPS0);
}

uint_fast16_t adc_shoot(){
  ADCSRA|=(1<<ADSC);
  while(!(ADCSRA &&(1<<ADSC)));
  unsigned char read_first;
  read_first=ADCL;
  return (ADCH<<8)+read_first;
}

Hoffe, das hilft wenn jemand das gleiche Problem hat...

Michael

Autor: PC69 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es sein, dass du nur 8 bit auslesen wolltest?

Wenn ich mich recht erinnere muss man auch im "8-bit modus" immer 16 bit 
lesen, ob man sie nun verwendet oder nicht.

Vielleicht wars ja sogar das hier...

Felix

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.