AVR Embedded Tutorial - Analog Read/de
Analog Read
Vorwort
Wie man die UART ansteuert, steht hier:
- UART UARTInit und UARTSendString(...
code
Dieser Code ist für einen Atmega328/Arduino mit 16MHz.
ADC Initialisieren
Analoges Einlesen konfigurieren. Als Referenzspannung wird AVcc genommen, dies ist der einfachste Weg. Dies mus an ADMUX übergeben werden.
Folgende Referenzspannungen kann man mit ADMUX konfigurieren:
Bit 7 | Bit 6 | Beschreibung |
---|---|---|
0 | 0 | Pin AREF |
0 | 1 | von AVcc |
1 | 0 | - |
1 | 1 | 2.56V |
Mit ADCSRA wird der Wandler gestartet.
procedure ADC_Init;
begin
ADMUX := (1 shl REFS); // AVcc als Referenz.
ADCSRA :=(1 shl ADEN) or // Wandler einschalten.
%111; // Teiler 128.
end;
Auslesen
Der Ablauf bei Messen ist folgendermassen.
- Port angeben.
- Warten bis Messung ferig.
- Messwert auslesen.
Bei ADMUX muss man die Referenzspannung nochmals angeben, weil es das Register mit Referenz teilt, man könnte auch eine or-Verknüpfung mit ADMUX machen.
function ADC_Read(Port: byte): integer;
begin
ADMUX := (1 shl REFS) or (Port and $0F); // Port angeben.
ADCSRA := ADCSRA or (1 shl ADSC); // Messen einleiten.
while (ADCSRA and (1 shl ADSC)) <> 0 do begin // Warten bis gemessen.
end;
Result := ADC; // Messwert auslesen.
end;
Wen man immer vom gleiche Port einliest, muss man die ADMUX-Zeile nur einmal aufrufen. Auch kann man dann das Messen einleiten direkt nach der 'while-Schleife machen. Die spart ein paar Takte.
Über UART ausgeben
Variablen für Zwischenspeicher für die Messdaten.
var
Data: integer;
s: string[10];
In einer Endlosschelife werden dann die Messdaten ausgegeben.
begin
// UART inizialisieren
UARTInit;
// ADC
ADC_Init;
asm
Sei end;
repeat
Data := ADC_Read(0);
str(Data: 6, s);
UARTSendString(s);
until 1 = 2;
end.