Hallo Freunde,
ich möchte gerne mit einem Atmega16 zwei verschiedene Analogsignale an
den Pins PA0 und PA1 abtasten.
Leider bin ich noch Anfänger und muss noch viel herum probieren und
lesen dazu. Aber jetzt komme ich wirklich nicht mehr weiter.
Vielleicht kann mir ja mal einer einen Tip geben und sagen, was an dem
unten aufgeführten Code nicht richtig ist. Was muss ich genau machen um
die Kanäle umzuschalten? Ich hatte das irrtümlicherweise schon über
Admux versucht, was ja aber für die Referenzspannung zuständig ist,
worauf mich in meinem vorigen Beitrag netterweise jemand drauf
aufmerksam gemacht hat.
Danke im Voraus.
Jens
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 4000000UL
#define ADATE 5
#endif
#include <util/delay.h>
int main(void)
{
uint16_t wert1;
uint16_t wert2;
DDRB |= (1 << DDB3); // Setup PB0 as output
while(1)
{
//erstes Abtasten
ADMUX |= (1<<REFS0);
ADCSRA |= (1<<ADEN)|(1<<ADATE)|(1<<ADPS2)|(1<<ADSC);
while(!(ADCSRA&(1<<ADSC))); // Wait until a conversion is finished
wert1 = ADC;
//zweites Abtasten
ADMUX |= (1<<REFS0);
ADCSRA |= (1<<ADEN)|(1<<ADATE)|(1<<ADPS2)|(1<<ADSC);
while(!(ADCSRA&(1<<ADSC))); // Wait until a conversion is finished
wert2 = ADC;
//über PWM Timer1 ausgeben
DDRD |= (1 << DDB4);
DDRD |= (1 << DDB5);
TCCR1A = (1<<WGM10)|(1<<WGM11)|(1<<COM1A1)|(1<<COM1B1);
TCCR1B = (1<<WGM12)|(1<<CS11)|(1<<CS10);
OCR1A = wert1;
OCR1B = wert2;
}
return 0;
}
Jens schrieb: > Admux versucht, was ja aber für die Referenzspannung zuständig ist nö schau mal auf seite 215 im Datenblatt du hast da noch nen paar bits die du nutzen solltest. kanal 0 aktiv 1<<REFS1 | 0<<REFS0 | 0<<ADLAR | 0<<MUX4 | 0<<MUX3 | 0<<MUX2 | 0<<MUX1 |0<<MUX0 kanal 1 aktiv 1<<REFS1 | 0<<REFS0 | 0<<ADLAR | 0<<MUX4 | 0<<MUX3 | 0<<MUX2 | 0<<MUX1 |1<<MUX0
Jens schrieb: > #ifndef F_CPU > #define F_CPU 4000000UL So ein blindes definieren von F_CPU im Code ist eine böse Falle, wenn du vergißt, F_CPU zu definieren und dein Board nicht mit 4MHz arbeitet. Das spuckt dir dann, ohne dass du damit rechnest, in dein gesamtes Timing rein. Bei deinem Wandler sollte man dem Multiplexer nach der Umschaltung etwas Zeit für die Pegelanpassung geben, bevor man die Wandlung startet. Sonst führt das zu Übersprechen zwischen den Kanälen.
Hallo Chriss, ja genau das ist ja mein Problem, wo soll die kanalumschaltung hin? Wie macht man das?
Hallo Chris, danke für die Antwort. Das wollte ich wissen. Ich schau mir mal Seite 215 an.
Hallo Mike. Ich hab da kein spezielles Board. Die Schaltungen, Versorgung, taktgebung USW habe ich selbst auf nem Steckboard zusammen aufgebaut. Für den Fall, dass du das meintest. Und das läuft mit 4 MHz. Also blind definieren tuh ich sowas nicht. Trotzdem bin ich offen dafür es noch zu verbessern, bzw. kleinere Fehler zu vermeiden. Wie meintest Du das mit dem Multiplexer?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.