mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC mit ATMEGA8535


Autor: Predator747 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>weis irgendjemand wo es ein Beispiel programm gibt?

Ja, ich.



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

Autor: Predator747 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry aber da ist kein Beispiel Programm

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?????

Autor: Predator747 (Gast)
Datum:

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

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>vielleicht ist ja jemand so freundlich

Warum? Wir sind Kerle...

Autor: predator747 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

};
}

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>SFIOR&=0x0F;

Was soll da passieren? (Sowas habe ich bisher noch nie gebraucht...)
while (1)
{

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

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

};
}


Wo fragst du den ADC ab?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...;-)

Autor: predator747 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...;-)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Falsch gedacht oder?? :-)

Kein Kommentar...

Autor: predator747 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: predator747 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

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

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

Autor: predator747 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rahul, der Trollige (Gast)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
Ach ja.
Dein Aufruf würde zb. so aussehen
  ...

  unsigned int AdcWert;

  ...

  while (1)
  {

    AdcWert = read_adc( 0 );    // Kanal 0 auslesen

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

  

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.