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
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?????
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);
};
}
> 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!
@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...;-)
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
>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...;-)
> 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...
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
>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...
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
> 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...
> 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.
> 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.
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?