Hallo, ich habe einen Atmega2560 im Einsatz. Port F verfügt über I/Os und über einen ADC. Kann ich einen Pin als ADC benutzten und die andern Pins als I/Os?
Hi
>Kann ich einen Pin als ADC benutzten und die andern Pins als I/Os?
Ja.
MfG Spess
A. R. schrieb: > Kann ich einen Pin als ADC benutzten und die andern Pins als I/Os? Was sagt das Datenblatt?
c-hater schrieb: > A. R. schrieb: > >> Kann ich einen Pin als ADC benutzten und die andern Pins als I/Os? > > Was sagt das Datenblatt? Im Datenblatt steht: >Port F also serves as an 8-bit bi-directional I/O port, if the A/D Converter is >not used. Wenn ich das richtig deute hieße das nein. War mir aber sicher, das es gehen sollte. Irgendwo stand nämlich, dass das Schalten der I/Os am selben Port Rückwirkung auf den ADC hat. Habs jetzt ausprobiert.
1 | PORTF = 0b00000000; |
2 | DDRF = 0b11111100;//A/D-Wandler an Pin 0 und 1 angeschlossen |
3 | |
4 | //AD_CONVERTER
|
5 | //A/D-Wanlder im free running mode konfigurieren
|
6 | //Löst nach jedem Sampling ein Interrupt aus.
|
7 | //Samplefrequenz beträgt 76,93kHz
|
8 | ADCSRA |= (1<<ADEN); //ADC einschalten |
9 | ADCSRA |= (1<<ADATE);//ADC Auto Trigger Enable, automatische Triggerung bei festzulegendem Event |
10 | ADCSRA |= (1<<ADIE); //Aktiviert ADC-Interrupts (Interrupt, sobald ein Sample durchgeführt worden ist) |
11 | ADCSRA |= (1<<ADPS2| 0<<ADPS1 | 0<<ADPS0);//Prescaller 16 --> 1MHz Takt --> 76,93kHz fürs Samplen (13Takte pro Wandlung) |
12 | ADCSRB |= (0<<ADTS2| 0<<ADTS1 | 0<<ADTS0);//Festzulegendes Event für "Auto Trigger Enable", bleibe im Free Running Modus |
13 | ADMUX |= (0<<REFS1| 0<<REFS0);//ARED, externe Referenz benutzen |
14 | ADMUX |= (1<<ADLAR);//ADCH --> 8 höherwertige Bits ADCL7 und ADCL6 --> letzte beiden Bits (LSB) //Wenn ADCL gelesen wird muss anschließen auch ADCH gelesen werde, ausreichend, nur ADCH zu lesen |
15 | ADMUX |= (0<<MUX4 |0<<MUX3| 0<<MUX2 | 0<<MUX1| 1<<MUX0);//ADC1, PF1, Cosinus |
16 | |
17 | ADCSRA |= (1<<ADSC); //Samplevorgang starten (free running Modus) |
Führe abwechselnd folgende Befehle aus:
1 | PORTF = 0b11111111; |
2 | PORTF = 0b00000000; |
Die Pins PF2 und PF3 werden geschaltet. PF4 bis PF7, die auch noch mit TCK, TMS, TDO und TDI belegt sind dauerhaft auf high. Kann mir jemand die Ursache erklären? Danke.
>Die Pins PF2 und PF3 werden geschaltet. >PF4 bis PF7, die auch noch mit TCK, TMS, TDO und TDI belegt sind >dauerhaft auf high. Kann mir jemand die Ursache erklären? JTAG Fuse abschalten.
Hi >Kann mir jemand die Ursache erklären? JTAG ist eingeschaltet. >>Port F also serves as an 8-bit bi-directional I/O port, if the A/D >>Converter is >>not used. >Wenn ich das richtig deute hieße das nein. Lies das Kapitel: I/O Ports->Alternate Port Functions im Datenblatt. MfG Spess
>Lies das Kapitel: I/O Ports->Alternate Port Functions im Datenblatt. Von dort habe ich den Text kopiert. >JTAG Fuse abschalten. Das habe ich befürchtet! Führt da kein Weg dran vorbei? EDIT: Habe jetzt JTAG ausgeschaltet. Hatte mir sowieso JTAG und ISP herausgeführt. Also danke für die schnellen und kompententen Antworten.
Hi >>Lies das Kapitel: I/O Ports->Alternate Port Functions im Datenblatt. >Von dort habe ich den Text kopiert. Da steht aber noch viel mehr drin. >Das habe ich befürchtet! >Führt da kein Weg dran vorbei? >EDIT: Habe jetzt JTAG ausgeschaltet. Hatte mir sowieso JTAG und ISP >herausgeführt. Wenn man weiß was man macht und einem ordentlichen Programmer ist das, wie du gemerkt hast, kein Problem. MfG Spess
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.