www.mikrocontroller.net

Forum: Compiler & IDEs auflösung analogwert


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo wenn ich meinen Analogwert auf max stelle zeigt er mir 1023 im 
display an! ich würde gerne wisse wo ich die Auflösung ändern kann? zum 
Beispiel auf 256...

gruß
#include <avr/io.h>
#include "subprogramme.h"
#include <util/delay.h>

 
void pwmanalog (void) {

 uint16_t messwert;


  

 // ADC 0 - Bit 4 - 0 auf 0
 // interne Referenzspannung nutzen Bit 7-6 auf 1

  ADMUX = 0b01000000;
 
  
// ADC Enable - Bit 7 auf 1
// ADC Prescaler 128 - Bit 2-0 auf 1 
  ADCSRA = 0b10000111;

  
  while (1) {
  
  set_cursor (2,1);
  lcd_string("Analog-Steuerung");    // Überschrift

  
  set_cursor (0,3);
  lcd_string("Analogwert  [V]:");    // Helligkeit in Prozent

    char puffer_analog [20];      //*
  sprintf(puffer_analog, "%4d", messwert);
  set_cursor (16,3);
  lcd_string (puffer_analog);    //* Ausgabe der Variablen messwert


  
    
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    
  while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
   
    messwert = ADCW;        // Wandlungsergebnisse aufaddieren
  
   if(PINC &(1<<6)) goto menue;  //wenn Taster 1 gedrückt zurück ins Hauptmenü

};
menue: menueposition =1;

};


Autor: Stefan Kunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teile deinen Messwert einfach durch 4 und nimm die goto-Befehle raus. 
Diese machen es nur unleserlich.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die goto Befehle brauche ich um aus der while(1) schleife rauszukommen 
damit ich wieder zurück ins menü zu gehen kann.

Oder haste eine bessere Alternative?

gruß

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian schrieb:
> Oder haste eine bessere Alternative?

ja, break;

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while ( ADCSRA & (1<<ADSC) ) & ~(PINC &(1<<6)) )
  {
  //schleife..
  }

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahso ^^, danke sehr :)

dachte break nimmt man nur bei Switch Case Anweisungen ...

Autor: Stefan Kunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder while(1)-schleife rausnehmen.  sondern immer wieder die funktion 
aufrufen solange bis was anderes passiert (State-Machine).

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Du gibst am Anfang messwert aus, woher der Wert auch immer kommen mag.
Erst weiter unten wird er dann erst ermittelt.
Hat mit deine Problematik nichts zu tun. Aber ist es
wirklich das, was du vorhast??

Gruß
Joachim

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja funktioniert wunderbar...

habe aber noch ne andere Frage, ich habe will 2 verschiedene 
Eingangsspannungen abfragen, einmal 5V und dann 2,5 V. Die 5V 
funktioniert soweit sehr gut da ich die ReFspg. 5V wählen konnte aber 
wie kann ich im Programm sagen dass ich gerne ne Referenzspannung von 
2,5 V hätte.

ADMUX = 0b01000000;

Bit 7 und 6 können verstellt werden soweit ich das im Datenblatt gesehen 
habe. in diesem Fall habe ich die 5V Refspg. die auch Funktioniert.


ADMUX = 0b11000000;

Laut Datenblatt müsste diese Kombi die 2,56V Refspg sein.

wisst ihr da weiter?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian schrieb:
> ja funktioniert wunderbar...

Aber nur, wenn man am Anfang nicht zu genau hinschaut.

> habe aber noch ne andere Frage, ich habe will 2 verschiedene
> Eingangsspannungen abfragen, einmal 5V und dann 2,5 V. Die 5V
> funktioniert soweit sehr gut da ich die ReFspg. 5V wählen konnte aber
> wie kann ich im Programm sagen dass ich gerne ne Referenzspannung von
> 2,5 V hätte.

Gar nicht.

Entweder du legst die 2.5V als externe Referenzspannung an AREF an und 
teilst deinem ADC mit das er gefälligst die als Referenz benutzen soll
oder du lebst mit den 5V als Referenz.


> Laut Datenblatt müsste diese Kombi die 2,56V Refspg sein.

Die sind aber nicht sehr genau.
Das können auch deutlich weniger sein.
Atmel garantiert dir nur, dass es die Referenzspannung sauber hält, 
nicht dass da exakt 2.56V entstehen.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm,

würde also funktionieren dass ich die interne Refspg. 5V Spg. für meine 
5V nehme, und per Programmcode auf externe Refspg. 2,5V umschalten kann, 
diese ich dann für 2,5V nutzen würde....?

mfg

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Referenzspannung bleibt immer bei 5V oder willst du die Spannungen 
unter 2,5V mit einer höheren genauigkeit erfassen?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein,

es ist so: ich will zwei verschiedene Eingangsspannungen über einen 
Eingang einlesen, einmal 10V und einmal 5V... so da 10V recht schlecht 
fürn µC ist habe ich ne OP beschaltung gebaut diese mir mit einer 
Verstärkung von 0,5 die Eingangsspannung halbiert. 10V ---> 5V und 5V 
----> 2,5V mein Problem ist nun die Eigentliche 5V die nun 2,5V sind wie 
kann ich die einlesen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie ist das was du vor hast nicht sehr logisch.

Auf der einen Seite willst du unbedingt eine externe Referenzspannung 
von 2.5V, damit du Spannungen unter 2.5V mit höchster möglicher 
Auflösung messen kannst, auf der anderen Seite verwirfst du dann 2 Bit, 
indem du den Messwert durch 4 teilst.

Das ist ungefähr so, als ob die den Wasserstand der Donau mit dem 
Mikrometer misst, auf die Anzeigetafel dann aber 3.8Meter hinschreibst.

Wenns dir Spass macht, ok tus, aber so richtig erschliesst sich der Sinn 
der Sache nicht.

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du liest deine 5V ein genauso wie du deine 2,5V einliest.
Der Analog Digitalwandler liefert dir das Verhältnis der gemessenen 
Spannung zur Referenzspannung

d.h. bei 5v Referenz und 10 Bit Auflösung (0-1023)

1023 = 5V
512 = 2,5V

um eine Spannung zu erhalten Multiplizierst du deinen A/D-Wert in diesem 
Beispiel mit 4,8mV = 5V/1024 Werte

also spuckt dir dein A/D Wandler 221 aus ist die anliegende Spannung 
1,06V

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.