Forum: Mikrocontroller und Digitale Elektronik ADC mit ATMEGA8535


von Predator747 (Gast)


Lesenswert?

Hallo ich würde gerne An meinem ATMEGA8535
eine Analog Spannung an PortA am ersten Pin wandeln,
ich weis aber leider nicht wie das mit der Declaration funkioniert am 
anfang und auf was ich achten muss
weis irgendjemand wo es ein Beispiel programm gibt?

Danke

von Rahul, der Trollige (Gast)


Lesenswert?

>weis irgendjemand wo es ein Beispiel programm gibt?

Ja, ich.



Im Tutorium:
http://www.mikrocontroller.net/articles/AVR

von Predator747 (Gast)


Lesenswert?

Sorry aber da ist kein Beispiel Programm

von Rahul, der Trollige (Gast)


Lesenswert?


von Basti (Gast)


Lesenswert?

datenblatt? suche in der codesammlung? vieleicht google? wobei das 
datenblatt sicher der beste rat ist. ansonsten selber anstrengen, 
versuchen und wenn garnix klappt hier versuchen, aber wenn der eindruck 
erweckt wird das jemand noch garnix versucht hat und sich hier die 
komplette lösung zusammenschnorren will dann wird das nix. konkrete 
frage -> konkrete antwort. aber ich stolper ja auch nicht in irgendein 
luft und raumfahrtforum: ich möchte mir eine marsrakete bauen, hat 
jemand die konstruktionspläne oder kann das eben für mich machen?????

von Predator747 (Gast)


Lesenswert?

natürlich nicht aber ich gedacht vielleicht ist ja jemand so freundlich
;-)
danke trozdem jungs

von Rahul, der Trollige (Gast)


Lesenswert?

>vielleicht ist ja jemand so freundlich

Warum? Wir sind Kerle...

von predator747 (Gast)


Lesenswert?

Nun habe ich das datenblatt mal durch gelesen und das Programm 
geschrieben
hab nun aber follgendes problem die werte des ADC Registers sind 
irgendwie müll es steht nicht der wert darin der seien sollte.
Verändert man die eingangsspannung ändert sich irgendwie nix angehängt 
habe ich ein teil des Programms

*****************************************************/

#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
#include "displaydrv.h"

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int 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 ADCW;
}

// Declare your global variables here

//Varibalen Declarierung
unsigned int Test1 = 0;

//Display Varible
char string[16];


void main(void)
{
// Declare your local variables here


// ADC initialization
// ADC Clock frequency: 62,500 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE;
ADCSRA=0xA6;
SFIOR&=0x0F;

// Global enable interrupts
#asm("sei")

//Display Aktivieren
InitDisplay ();



while (1)
{

                MoveToPosition (0, 0);
                sprintf (string ,"%04d, ADCL");
                SetLine (4, string);

                MoveToPosition (1, 0);
                sprintf (string ,"%04d, ADCH");
                SetLine (4 , string);

};
}

von johnny.m (Gast)


Lesenswert?

> angehängt habe ich ein teil des Programms
Und warum zum Geier nur einen Teil und nicht den kompletten Code? So wie 
das oben steht, kann nichts herauskommen, weil "read_adc" nie 
aufgerufen wird!

von Rahul, der Trollige (Gast)


Lesenswert?

>SFIOR&=0x0F;

Was soll da passieren? (Sowas habe ich bisher noch nie gebraucht...)
1
while (1)
2
{
3
4
                MoveToPosition (0, 0);
5
                sprintf (string ,"%04d, ADCL");
6
                SetLine (4, string);
7
8
                MoveToPosition (1, 0);
9
                sprintf (string ,"%04d, ADCH");
10
                SetLine (4 , string);
11
12
};
13
}

Wo fragst du den ADC ab?

von johnny.m (Gast)


Lesenswert?

@Rahul:
> >SFIOR&=0x0F;

> Was soll da passieren? (Sowas habe ich bisher noch nie gebraucht...)
Das macht der Code Generation Wizard vom CodeVision. Da braucht man nur 
ein paar Buttons anklicken, und schon erzeugt einem das Ding Code, ohne 
dass man verstehen muss, warum... Ist das nicht schön? (Zumindest, 
solange man keine Fehler suchen muss...;-)

von predator747 (Gast)


Lesenswert?

Wie frägt man den ADC ab? mit welchem befehl
Der sprintf befehl ist nur für meinen Display Treiber er schreibt 
einfach den jetzigen inhalt des adch oder adcl registers auf das display
ich hab gedacht wenn er im free running modus läuft ändert sich der 
register wert automatisch. Falsch gedacht oder?? :-) danke trozdem

von Rahul, der Trollige (Gast)


Lesenswert?

>Ist das nicht schön? (Zumindest, solange man keine Fehler suchen muss...
Ich kenne da noch eine "Baukasten-Programmier-Sprache", die gerne 
Probleme bereitet... die fängt mit "Bas" an und hört mit "m" auf...(das 
"co" kann man sich sicherlich denken...;-)

von johnny.m (Gast)


Lesenswert?

> Wie frägt man den ADC ab? mit welchem befehl
Könnte es eventuell sein, dass Du von dem Code, den Du da 
zusammengestückelt hast, ÜBERHAUPT NICHTS verstanden hast? Du hast eine 
Funktion, die den ADC initialisiert und einen Wert zurückgibt. Wenn Du 
diese Funktion aber aus dem Hauptprogramm heraus überhaupt nicht 
aufrufst, dann kann auch kein Ergebnis rauskommen...

von Rahul, der Trollige (Gast)


Lesenswert?

>Falsch gedacht oder?? :-)

Kein Kommentar...

von predator747 (Gast)


Lesenswert?

Die Funktion hab ich doch garnicht geschrieben die hat der Compiler 
selber Generiert!! Mein Arbeitgeber hat das nur angeklickt und gemeint 
ich werd schon rausfinden wie das geht!!!Ich selber hab noch nicht 
wirklich viel Programiert ledigtlich ein lauflicht oder ein paar kleine 
IF schleifen ich mach das ja erst seit 2 wochen. Und jetzt soll ich halt 
so ein projekt mit dem AD wandler machen!!!

ich hab jetzt mal

read_adc(WERT = ADCW);

 in die while schleife

integriert leider erfolos

im register steht immer müll

von Rahul, der Trollige (Gast)


Lesenswert?

>read_adc(WERT = ADCW);

Vielleicht solltest du dir erst mal C-Grundlagen antun.

>Compiler selber Generiert!

Das ist definitiv gelogen.
Compiler generieren eher keinen C-Code.
Was du meinst, ist der Klickiklick-Wizard, der dazu führt, nicht mehr zu 
denken...

von predator747 (Gast)


Lesenswert?

OB generiert oder eingefügt ist doch egal ich will damit nur sagen das 
der code nicht von mir stammt!!!
Sagt mir doch einfach wie ich den read_adc befehl ein bauen soll
danke

von johnny.m (Gast)


Lesenswert?

> Mein Arbeitgeber hat das nur angeklickt und gemeint
> ich werd schon rausfinden wie das geht!!!
Gut, dass ich nicht so einen Arbeitgeber habe...

Aber was Du brauchst, sind tatsächlich einige C-Grundlagen. Eine gute 
Einführung in deutscher Sprache, die sich auch um den A/D-Wandler 
kümmert, ist das AVR-GCC-Tutorial auf dieser Seite. Es bezieht sich zwar 
nicht auf den CodeVision-Compiler, aber solange Du die da angegebene 
ANSI-C-Syntax benutzt, kann der CodeVision das auch compilieren. Und 
gerade, um das Prinzip zu verstehen, ist das Tut sicher ein guter 
Anfang, auch wenns drum geht, dass einem ein Arbeitgeber mit oben 
genannter Einstellung im Nacken sitzt und Druck macht, weil alles 
gestern schon fertig sein soll...

von Karl H. (kbuchegg)


Lesenswert?

> Aber was Du brauchst, sind tatsächlich einige C-Grundlagen

Allerdings. Eine Funktion aufrufen zu können, sind absolute
Grundlagen.
Sag deinem Arbeitgeber (etwas freundlicher als ich das
jetzt schildere), wenn er zu dämlich ist dir einen
Lehrer zu stellen, dann soll er dir wenigstens ein
Buch kaufen, dass du in deiner Arbeitszeit lesen darfst.
Das Buch sollte sein:
 "Kernighan&Ritchie, Programmieren in C"

Mit dem (und einer Programmierumgebung auf dem, und für den
PC), machst du erst mal die ersten Schritte in C.

Du kannst nicht laufen, wenn du noch nicht gehen kannst.
Jemand der in seinem ganzen Leben noch nie einen Schrauben-
zieher in der Hand hatte, stellt man auch nicht ohne einen
einführenden Werkstattkurs in ein CNC-Fräscenter.

von Karl H. (kbuchegg)


Lesenswert?

> Mein Arbeitgeber hat das nur angeklickt und gemeint
> ich werd schon rausfinden wie das geht!!!

Das erinnert mich ein bischen an den Informatik unterricht
in den späten 70-er, frühen 80-er Jahren.

Da wurden massenhaft Physik oder Mathelehrer in den grossen
Ferien zwangsbeglückt im nächsten Schuljahr den EDV
Unterricht zu übernehmen.

Entsprechend sah dann auch der Unterricht aus.

von predator747 (Gast)


Lesenswert?

Ich frag mal meinen Chef ob er mir einen Lehrer stellt was ich aber für 
ziemlich unwahrscheinlich halte. Danach bestell ich mir ein Buch, ich 
denke ich muss das daheim lesen für sowas haben wir hier keine zeit.

Nochmal zum AD Wandler wenn ich die read_adc Funktion aufrufe wandelt er 
einmal den wert?

von Rahul, der Trollige (Gast)


Lesenswert?

>Nochmal zum AD Wandler wenn ich die read_adc Funktion aufrufe wandelt er
>einmal den wert?
Ja

von Karl H. (kbuchegg)


Lesenswert?

Ach ja.
Dein Aufruf würde zb. so aussehen
1
  ...
2
3
  unsigned int AdcWert;
4
5
  ...
6
7
  while (1)
8
  {
9
10
    AdcWert = read_adc( 0 );    // Kanal 0 auslesen
11
12
    MoveToPosition (0, 0);
13
    sprintf (string ,"%04d", AdcWert);
14
    SetLine (4, string);
15
  }

  

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.