Hallo zusammen, bin dabei einen "Temperaturmesser" mit dem AT Mega 32 und dem Pollin Board zu realisieren um einfach mal die Grundfunktionen wie AD-Wandler LCD Display usw. etwas besser kennen zu lernen. Später will ich auch noch ein PWM Signal abhänig von der Temperatur steuern und mir so ne Art lüftersteuerung bauen und somit alle Wichtigen Funktionen des AT Mega 32 mal auszutesten. Da ich selber eher noch wenig erfahrung mit yc habe und mich bislang aus blinkende LED´s und den bau eingener PWM Signale (mit hilfe der delay Funktion) beschränkt habe werde ich bei dem nächsten Schritt wohl etwas Hilfe gebrauchen. Habe den AD Wandler bislang mit Hilfe des gcc Tutorials und der anpassung des Codes auf den AT Mega 32 in gang gebracht. Da ich aber nicht eis ob dieser auch geht, da ich ja nicht sehen kann was der yc in der variablen für die Temperatur ablegt brächte ich mal tipps wie ich am besten weitermachen soll. Hab mir schon überlegt den Wert über die RS 232 Schnittstelle auszugeben aber das wär wieder ne größere Baustelle und hat auch mit dem Tutorial nicht funktioniert.. Wie wird der Wert vom AD Wandler in die Variable gespeichert wenn ich jetzt z.B 1V als ergebnis bekomme? Habe versucht ne LED An oder auszuschalten wenn der Wert der Variablen <1 V ist, also keine Spg anliegt, was aber nicht funzt.. Mein Code: HIER OBEN IST DER CODE DES AD WANDLERS AUS DEM TUTORIAL ANGEPASST AN ATMEGA 32 #include <avr/io.h> #include <stdio.h> #include <stdint.h> #define F_CPU 1000000UL #include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */ int ReadChannel(int mux) { int i; int result; ADMUX = mux; // Kanal waehlen ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler // setzen auf 8 (1) und ADC aktivieren (1) /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */ ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while ( ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten } result = ADCW; // ADCW muss einmal gelesen werden, // sonst wird Ergebnis der nächsten Wandlung // nicht übernommen. /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */ result = 0; for( i=0; i<4; i++ ) { ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while ( ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten } result += ADCW; // Wandlungsergebnisse aufaddieren } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2) result /= 4; // Summe durch vier teilen = arithm. Mittelwert return result; } int main (void) { int adcval; while(1){ DDRD= (1<<DDD5) | (1<<DDD6)| (1<<DDD7); // Pin D 5 und 6 und 7 nd Ausgänge, rest Eingänge if( PIND & (1<<PIND2)) { adcval = ReadChannel(0); PORTD |= (1<<PD6); //Versuch ne LED an zu bekommen, geht aber net,diese stelle wird irgendwie net erreicht _delay_ms(200);} if(adcval < 1 ) { PORTD |= (1<<PD5); } else{ PORTD =0x00; } return 0; }}
Welchen Temperatursensor benutzt du, wenn du dafür AD-Wandlung brauchst? Ich habe bisher eher Projekte (Bsp. unten) gesehen, bei den ein Temperatursensor-IC bereits ein Digitalsignal ausgibt und wo das IC über einen Bus z.B. über I2C (TWO) oder 1-Wire an den µC angeschlossen wird. *Thermometer with Atmel AVR and Dallas DS1821* von Stefan Heesch http://www.heesch.net/(S(miinrc55dpyljt45xkhyuh45))/ds1821.aspx
wie gesagt geht es mir nicht primär um das Projekt "Temperaturmessung" sondern darum mit dem At Mega 32 umgehen zu können, dazu au der AD wandler. Werd irgend einen NTC oder PTC verwenden, die genauigkeit is eigentlich erstmal nebensache, es soll sich halt bei ändernder temp(Spg) irgendwas tun, sprich Display anzeige oder PWM änderung oder so ähnlich.. Bin leider no net wirklich weitergekommen mit meinem Problemchen...
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.