mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC und Codevision


Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hay Leute

Ich versuche einen ADC mitz Codevision auszulesen und Spannung anzeigen 
zu lassen mein problem ist das er mir auf dem Display nur dies anzeigt

read_adc(0)
kommt das 255

wenn ich das ganze dann mal mit gleichung probiere also so

(read_adc(0)*5.0)/1024.0
dann bekomm ich dies 24779

Ich habe am AVCC eine Spannung von 5V Anliegen.


Wie müsste ich das machen bzw berechnen das ich auf meine 5V oder 5000mV 
komme.?


MFG: Andre

Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es fehlen ein paar wichtige Angaben:
machst du eine 8 oder 10 Bit ADC?
Weil du was von 255 schreibst, tippe ich mal auf 8 Bit
was hast du als Refernzspannung angegeben? Benutzt du die interne 
Referenz?
Diese hat 2,54V, deine Spannung sollte also zwischen 0...2,54V liegen

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ÄÄÄHHHMMM

Ja also ich mache dies im 8Bit Modus.

Aber bitte Frag mich jetzt mal nicht was ich als Refernzspannung nehme 
wo stelle ich die ein oder wo lege ich diese Fest.?

Mfg. Andre

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Glaubst Du wirklich, ohne Dein Programm zu sehen, kann Dir hier 
irgendjemand helfen?

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein das war mir schon fast klar Sorry.

#include <mega128.h>
#include <delay.h>
#include <math.h>

#include "glcd_befehle.c"

#define ADC_VREF_TYPE 0x60

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
char text[16];

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In 
Func0=In
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=T State1=T 
State0=T
PORTC=0x00;
DDRC=0xF8;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTD=0x00;
DDRD=0x00;

// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTE=0x00;
DDRE=0x00;

// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTF=0x00;
DDRF=0x00;

// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;

//Zum Initialisieren des GLCD
glcd_init_display();

while (1)
      {

 sprintf(text,"%03u",read_adc(0));  //0.004883
 glcd_printstring(4,10,text);

 sprintf(text,"%03u",read_adc(0)*0.004883);  //0.004883 
read_adc*5V/1024
 glcd_printstring(4,20,text);

      delay_ms(50);
      };
}

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Referenzspannung stellst du ein wenn du im Codevision Code Generator 
den ADC an schaltest. Da stellst du bei Volt. Ref Int, cap. on AREF ein 
und schließt einen Kondensator von AREF nach GND (100nF)
jetzt kannst du Spannungen zwischen 0 bis 2,54V messen. Andere Frage: 
hat es einen Grund warum du nicht den 10 Bit Modus benutzt?
Und was für ein LCD ist da angeschlossen?

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie stelle ich denn, den 10bit Modus im Codevision ein.?

Das LCD ist ein selbst geschriebenes von mir für den t6963c Controller.



MFG: Andre

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der 10 Bit Modus ist der default Modus (nicht bei 8 Bit den Haken 
setzen)
Dann gibt er dir einen Wert zwischen 0 und 1024 raus.
Nochwas: Wenn du zB 0 bis 5V messen willst, brauchst du einen 
Spannungsteiler idealerweise mit zwei gleichen Widerständen. (zB 10k)

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1023

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau 1023 zeigt er mir an.

Okay das funktioniert wunderbar und wie sieht nun die berechnung zum 
anzeigen der Spannung aus.?


MFG: Andre

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jaja.... mea maxima culpa ;)

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verrätst du uns bitte mal welchen Spannungsbereich du messen willst? 
Raten ist zwar lustig, aber naja...

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach zum testen reichen mir von 0-5V.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tja, der gute alte Dreisatz...
Was da vor dir liegt, kann rechnen. Wirklich.

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

Bewertung
0 lesenswert
nicht lesenswert
Andre wrote:
> genau 1023 zeigt er mir an.
>
> Okay das funktioniert wunderbar und wie sieht nun die berechnung zum
> anzeigen der Spannung aus.?

1023 Äpfel kosten 5 Euro.
Wieviel kosten x Äpfel?

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja bin schon voll gaga.
wer rechnen kann ist klar im vorteil.

MFG: Andre

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.