ADC holst
Modulet ADC_holst er lavet som en tilpasning til de AD-konvertere der sidder i de mest anvendte PIC-kredse på Holstebro HTX.
ADC_holst virker kun for PIC16F684 og PIC16F690 for andre pic typer brug ADC bibloteket
Modulet består kun af Software til modulet.
I softwaren ligger der et eksempel på hvordan det kan anvendes.
En AD-konverter har den funktion, at man kan levere en analog spænding til AD-konverteren (her et ben på PIC'en), og aflæse hvilken spænding der ligger på benet, udtrykt som en digital værdi (et tal fra 0 - 1023).
Indholdsfortegnelse
Princip-diagram for ADC_Holst
Der er ikke noget egentligt diagram til AD-konverteren, og slet ikke til det software-interface der ligger i ADC_Holst, men det kan alligevel bidrage med noget forståelse af AD-konverteringens funktion, at gennemgå principskitsen for AD-konverteren i PIC'en. Princip-skitsen der er vist her er for en PIC16F684, men den generelle funktion er den samme i alle PIC-typer
Centralt på princip-skitsen sidder selve AD-konverteren (ikke markeret), der laver den aktuelle konvertering fra en analog spænding til et digitalt tal på 10 bit. Den røde markering angiver det antal indgange der kan håndtere Analoge signaler (her 8 forskellige), og komponententen der sidder på vej ind til AD'en er en multiplexer, der kan vælge hvilken indgang der skal have forbindelse ind til AD-konverteren. Der kan altså kun konverteres på en indgang ad gangen. I softwaren ADC_Holst kan man vælge hvilken kanal man ønsker at aflæse. Den grønne markering er de to styre-signaler der tænder for AD-konverteren, og sætter konverteringen i gang. Dette bliver styret af ADC_Holst, når man læser en værdi. Den blå markering angiver at man kan indstille referencen til 2 forskellige ting. Dels kan den sættes til VDD (forsyningsspændingen, eller den kan kobles på et andet ben, der har en ekstern referencespænding tilsluttet, som skal ligge mellem 2,2V og VDD).
Den brune markering angiver tilslutningen ind til den indre del af PIC'en, at resultatet lander i 2 registre ADRESH og ADRESL, men dette håndteres også af ADC_holst, så man blot kan aflæse et tal. |
![]() |
Software modulet ADC_holst.jal
Som nævnt ovenfor kan man vælge referencen med ADC_NVREF, men for at sætte den til VDD skrives blot:
const byte ADC_NVREF = 0
Dette skal gøres inden man includer modulet med biblioteket i, med følgende linje:
include ADC_Holst
Efter dette er ADC-modulet klar til brug, så det eneste man skal gøre for at læse en AD-værdi er at kalde en funktion, der returnerer den konverterede værdi. Det er to forskellige rutine man kan anvende:
adc_read(kanal)
adc_read_byte(kanal)
Funktionen adc_read(kanal) returnerer et word, hvor værdien kan ligge fra 0 til 1023
Funktionen adc_read_byte(kanal) returnerer en byte, hvor værdien kan ligge fra 0 til 255.
Den kanal der skal med som parameter er AD-kanalnummeret som man vil læse på. Der er senere beskrevet sammenhængen med pin-numre.
Alt softwaren kan hentes i denne ZIP-fil sammen med eksempler på hvordan modulet kan anvendes.
Interface til ADC_holst
Som beskrevet skal man sætte ADC_NVREF inden man includer ADC_holst. Herefter skal man blot kalde en af funktionerne med et kanal-nummer angivet, som beskrevet i følgende tabel:
kanal-nr | PIC12F675 | PIC16F684 | PIC16F690 | |||
---|---|---|---|---|---|---|
port-pin | ben | port-pin | ben | port-pin | ben | |
0 | RA0 | 7 | RA0 | 12 | RA0 | 19 |
1 | RA1 | 6 | RA1 | 11 | RA1 | 18 |
2 | RA2 | 5 | RA2 | 10 | RA2 | 17 |
3 | RA3 | 3 | RA4 | 2 | RA4 | 3 |
4 | RC0 | 9 | RC0 | 16 | ||
5 | RC1 | 8 | RC1 | 15 | ||
6 | RC2 | 7 | RC2 | 14 | ||
7 | RC3 | 6 | RC3 | 7 | ||
8 | RC6 | 8 | ||||
9 | RC7 | 9 | ||||
10 | RB4 | 13 | ||||
11 | RB5 | 12 |
Anvendelsen af ADC_holst modulet
Som beskrevet, så er ADC_Holst (speciel tilføjelse i Holstebro) skrevet til PIC-typerne PIC12F675, PIC16F684 og PIC16F690. Det er 3 af de typer PIC vi har som har indbygget AD-konverter. PIC'en PIC16F877 har også indbygge AD-konvertere (8 kanaler), men til dette skal man anvende ADC modulet (standard i JAL).
En simpel demonstration af ADC_Holst modulets funktion kan laves som følger inde i forever-loopet:
if pin_a3 then -- Hvis RA3 er aktiveret
if ! last_a3 then -- Og den ikke var det sidste gennemløb
kanal = kanal + 1 -- skift til næste kanal på AD-kenverteren
kanal = kanal & 0x03 -- hold kanalnummeret i området 0 - 3
-- fordi vi bruger hele port C (4-7) som output
end if
last_a3 = true -- husk RA3 til næste gang
else
last_a3 = false -- husk RA3 til næste gang
end if
PortC = adc_read_byte(kanal) -- Udlæs 8 bits aflæsning på portc
delay_100ms(1)
Tastaturer | Displays | AD-konvertering | I/O-ekspander | Serielt | Interface | Færdige | Andre |
---|---|---|---|---|---|---|---|
RC-tast - AD-tast - M_tast | ALCD - LCD | ADC_holst - ADC mcp3201 - mcp3208 |
input - output | Seriel_holst - Serial hardware Serial hw int cts - Serial software |
Stepmotor - RFID RGB - RF-link - Afstand |
Humidity - Analog temp - Dig temp Accelerometer |
Rotary Encoder |
Oversigt over Hardware Moduler på Holstebro HTX