Hallo, Ich bin noch neu in der C-Programmierung und deswegen bräuchte ich eure Hilfe. Also: Ich brauche einen Ad-Wandler für meinen ATMEGA 16. Am PortA.0 hängt ein potentiometer, und an PortC.0 hängt eine LED (zu Versuchs zwecken). Ich habe bereits ein Programm geschrieben mit dem ich eine PWM erzeugen kann und sie am PORTC.0 ausgeben kann, das funktioniert ohne Probleme, doch jetzt will ich die PWM mittels des Potentiometers manuel einstellen können. Also muss ich den Wert bei PortA.0 (Poti) auslesen und in ein PWM "verwandeln". Das ist das bestehende Programm liegt als Anhang bei. Habe das Programm mit CodeVisionAVR geschrieben Und dieses will ich jetzt umschreiben das er die PWM nicht mehr automatisch erstellt, sondern ich sie mittels Poti einstellen kann. Kann mir jemand helfen und zeigen wie es geht, ich bekomms einfach nicht hin :-( Vielen Dank Maikas
Hmmm, das hab ich mir schon durchgelesen, trotzdem danke. Ich griegs aber leider nicht hin, irgendwas mache ich falsch. Kann noch jemand helfen und mir sagen wie es gehört
Maikas wrote: > Hmmm, das hab ich mir schon durchgelesen, trotzdem danke. > Ich griegs aber leider nicht hin, irgendwas mache ich falsch. Kann noch > jemand helfen und mir sagen wie es gehört Dann lies es dir nochmal durch. Ein Stückchen weiter unten ist Programmcode. Vergleich mal die Initialisierungen die du bei den Registern machst. Vor allem das ADMUX Register. Und schau dir am besten auch die Syntax zum Bitsetzen vom Tutoriumsbeispiel ab. Sowas ADCSRA|=0x40; ist nicht wirklich sehr aussagekräftig, wenn man es mit ADCSRA |= (1<<ADSC); vergleicht. Im letzten Fall sieht man zumindest, dass hier das ADSC Bit gesetzt werden soll. Und noch was: Wenn deine LED ständig auf den ADC reagieren soll, dann wird wohl die Abfrage des ADC Wertes (der Aufruf der Funktion) in die while Schleife hinein muessen. Ansonsten wird der ADC ja nur einmal, ganz am Anfang abgefragt. (Meine perönliche Meinung: Schmeiss mal alles was dieser dämliche Wizzard generiert hat und du nicht in deinem Programm brauchst aus dem Programm raus. Das ist seitenweise Code, der keinen Menschen interessiert. Und der Rest ist dank der Hex-Zahlen Orgie so gut wie nicht lesbar.)
////////////////////////////////////////////////////////////////////
// ADC.C //
// Eduard-Spranger-Berufskolleg //
// 10.12.2009 Mikrocontrollertechnik //
//////////////////////////////////////////////////////©rudolphi/////
// Definitionen Deklarationen Include
#include <REG517A.h> // P4 in REG517A.h als SFR deklariert
#include <lcd.h> // Steuert die LCD-Ausgabe
#include <stdio.h> // Standard Input Output
// Hauptprogramm
void main(void)
{
int ADC; // ADC-Wert
lcd_init (); // LCD initialisieren
crsr_pos (0x00); // Cursor auf home Position
printf ("Wurst"); // Text ausgeben
//AD Initialisierung
ADCON1=0x01; //Eingang AIN0 P7.1 wählen
ADM=0; //Einzelwandlung einstellen
ADEX=0; //Software-Start einstellen
// AD-Wandlung
while(1) //Endlossschleife
{
ADDATL=0x00; //ADC neu starten
while(BSY==1); //Warte bis Wandlungsende BSY=0
ADC=ADDATH; //Digitalisierter Analogwert auslesen und in
Datentyp int wandeln
crsr_pos (0x40); //Cursor in Ausgabeposition
printf ("DEZ %3d",ADC); //Dezimalausgabe auf LCD
}
}
Nach 7 Jahren: Themenverfehlung, da anderer Prozessor. Und bevor sich jemand bemüssigt sieht, da noch der langen Zeit noch einen drauf zu setzen, mach ich dicht.
