Datum: 03.07.2008 15:26
moin, ich hab hier einen ATMEL Tiny13, an welchen zwei LEDs angeschlossen sind. LED #1 an PB0, LED #2 an PB3. PB4 ist als Eingang geschaltet. Wenn die Spannung an PB4 ansteigt(von 0V auf etwa 50mV) soll eine der beiden LEDs ausgehen. Nun Habe ich folgendes kleines Testprogramm geschrieben:
#include <avr/io.h> #include <stdint.h> #include <util/delay.h> void init(void); void alarm(void); int main(void) { DDRB=0xff; DDRB&=~(1<<4); init(); while(1) { if(ADCH<250) PORTB&=~(1<<0); else PORTB|=(1<<0); } return 0; } void init(void) { ADCSRA&=~(1<<ADPS2); ADCSRA&=~(1<<ADPS1); ADCSRA&=~(1<<ADPS0); ADMUX&=~(1<<REFS0); ADCSRB&=~(1<<ADTS2); ADCSRB&=~(1<<ADTS1); ADCSRB&=~(1<<ADTS0); ADMUX|=(1<<0); ADMUX&=~(1<<1); ADMUX|=(1<<ADATE); ADMUX|=(1<<ADLAR); ADCSRA|=(1<<ADEN); ADCSRA|=(1<<ADSC); } |
Problem: LED #1 leuchtet und geht auch wie beabsichtigt aus wenn der Stromkreis geschlossen wird, jedoch erst wenn die vollen 2,4V anliegen(also alles was die Batterie hergibt). Wie kriege ich das Programm dazu bereits bei einer Spannung von etwa 50mV zu reagieren? Hab übrigens in der "if(ADCH<250)"-Abfrage alle möglichen Werte von 1-250 durchprobiert - keine Veränderung :( Danke Dominik
Datum: 03.07.2008 15:52
Du hast im MUX PB2 ausgewählt, und nicht PB4.
Datum: 03.07.2008 15:55
Und das Bit ADATE liegt nicht in ADMUX.
Datum: 03.07.2008 16:27
so, hab nun ADMUX&=~(1<<0); in ADMUX|=(1<<0); und ADMUX|=(1<<0) in ADMUX&=~(1<<1); geändert. Die Schaltung verhält sich jetzt genau wie vorher, mit dem Unterschied, dass wenn ich den ADHC register auf werte unter 200 prüfe die LED immer an ist, und wenn ich ADHC auf Werte über 200 prüfe die LED immer aus ist.
Datum: 03.07.2008 16:30
Ich hab das mal etwas leserlicher umgeschrieben. Aber: - mit welcher Spannung läuft der Attiny (bzw. wie hoch ist die Referenzspannung für den ADC)? - mit welchem Takt läuft der Attiny (der ADC-takt muss auf 50-200kHz eingestellt werden -- auch mehr, falls du nur die 8-Bit brauchst) - bist du sicher, dass die LEDs mit den 2,4V überhaupt leuchten? ;) - wenn du bei 50mV (0,05V) schalten willst, wäre das aber bei ADCH = 0,05/5 * 256 == 2 (wenn der tiny mit 5V läuft) hth. Jörg
Datum: 03.07.2008 16:41
Stefan Ernst wrote:
> Und das Bit ADATE liegt nicht in ADMUX.
DAS war`s! War tatsächlich nur ein Tippfehler!
Sorry, und vielen Dank an alle
Dominik
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel