Problem med AD och komparator på PIC12F675.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Problem med AD och komparator på PIC12F675.

Inlägg av JimmyAndersson »

PIC12F675. Matningspänning: 3,2V. ASM.


Har gjort en kod som ska fungera såhär:

När det kommer in en fyrkantvåg på 1V till GP0 eller GP1 (ej båda samtidigt) så ska en likadan fyrkantvåg ut på GP2, fast 3,2V istället för 1V. Komparatorn avgör om fyrkantvågen kommer in på GP0 eller GP1, sedan sätts AN0 (GP0) eller AN1 (GP1) som ingång för AD-omvandlaren.


Men såhär blir det i verkligheten:

(1V fyrkantvåg = 100Hz från frekvensgenerator)

GP0 Kopplad till GND. 0V in på GP1:
AD-interrupt. 3,2V (likspänning, ej fyrkantvåg) ut på GP2.

GP0 Kopplad till GND. 1V fyrkantvåg på GP1:
Komparator-interrupt. 0V ut på GP2.

GP1 Kopplad till GND. 0V in på GP0:
AD-interrupt. 3,2V (likspänning, ej fyrkantvåg) ut på GP2.

GP1 Kopplad till GND. 1V fyrkantvåg in på GP0:
AD-interrupt. 3,2V ut på GP2.



Hela koden finns här.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Du måste kolla upp hur du använder GOTO, RETURN och RETFIE.
Som det ser ut kommer det INTE att fungera... :-)
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Ah, visst ja. GOTO hoppar "villkorslöst" eller hur man ska beskriva det. Hade glömt det.

Men nu har jag bytt till CALL och nu får jag interrupt. Men det är fortfarande något som inte fungerar. Jag måste reseta PIC-kretsen hela tiden för att se förändringar som t.ex om har spänning eller inte på ingången. Precis som om programmet fastnar i en loop. Men nu har jag ju plockat bort goto-raderna..

Har testat att flytta upp "nollställningen" av interrupten, men det hjälpte inte.

Skrev över förra källkoden jag laddade upp med den nya versionen: Kod.asm


Tips?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Notera att om du har BTFSS, BCF, BSF efter varandra så kommer
BSF *alltid* att utföras (och eventuellt BCF beroende på BTFSS).
Jag vet inte om det är avsikten. Om du vill att *antingen* BCF
eller BSF ska utföras så behövs det lite mer kod. T.ex en
extra BTFSx mellan de två.

Annars verkar väl CALL/RETURN vara OK nu...

> GOTO hoppar "villkorslöst" eller hur man ska beskriva det.

Igentligen är det inte någon större skillnad på CALL och GOTO, båda
laddar en ny adress till PC och processorn "hoppar" dit. Det enda som
skilljer är att CALL även sparar adressen till instruktionen *efter* CALL
på stacken, så att RETURN har någonstans att återvända. Processorn
i sig har inget begrepp om att den befinner sig i en "subrutin", och
det finns igentligen inga "subrutiner" i assembler, vi bara kallar den kod
som ligger mellan en label och en RETURN så... Om man ska vara petig...
:-)
Skriv svar