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.
Problem med AD och komparator på PIC12F675.
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
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?
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?
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...

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...
