Foren-Übersicht

Sie müssen eingeloggt sein, um zu antworten.

Thema: A/D bei C515C

Autor Beitrag

stern1

1 Beitrag

Neuer Benutzer
Neuer Benutzer

Read post 17-11-2011 12:45

Hallo,

kann jemand bitte mir diese Funktion erklären:

unsigned Read_ADC( unsigned char channel )
{
ADCON0 &= ~0x07; ADCON0 |= 0x07 & channel; ADDATL |= ~ADDATL; while( ADCON0 & 0x10); return( ( ( (unsigned) ADDATH > 6 );
}

Rai

34 Beiträge

Seltener Benutzer
Seltener Benutzer

Read post 17-11-2011 13:47

Hi,

kein Problem, allerdings habe ich gerade kein Datenblatt dabei, deshalb alles ausm Kopf:

ADCON0 &= ~0x07;
Die Tilde negiert alle Bits von 0x07, also könnte man auch 0xF8 schreiben.
Dann wird noch eine UND Maskierung mit dem ADCON0 register gemacht --> Die letzten 3 Bits von ADCON0 werden somit gelöscht. (Dort sollte der Kanal stehen)

ADCON0 |= 0x07 & channel;
Mit "0x07 & channel" wird sichergestellt dass nur ein "richtiger" kanal übergeben wurde, also eine Zahl zwischen 0 und 7. Alle anderen Bits würden gelöscht werden
Dann wird der Kanel mit einer ODER Maskierung in ADCON 0 geschrieben

ADDATL |= ~ADDATL;
Diese Zeile kann ich dir auswendig ohne Datenblatt nicht erklären, vermutlich wird aber hier die Wandlung gestartet indem das zuständige Bit invertiert wird.

while( ADCON0 & 0x10);
Hier wird gewartet bis der AD Wandler ein Ergebnis vorliegen hat

return( ( ( (unsigned) ADDATH > 6 );
Hier fehlt was! Prinzipiell wird aber am Schluss das höherwertige Byte um 2 Bit nach links verschoben und dann das niederwertigere Byte mit einer Maskierung draufaddiert.


Rai

Sie müssen eingeloggt sein, um zu antworten.

Feedback zu Elektor

Folgen Sie Elektor auf...