Shock Media

Navigatie

12F675 comparator problemen

Forum > Digitaal > 12F675 comparator problemen
Naam Bericht
GeertJan

Dit zal wel een typisch gevalletje worden van een "senior moment" / blinde vlek / ongelofelijk stomme fout, maar ik krijg dit niet goed:

PIC 12F675, interne oscillator. In register CMCON is CM2:CM0 = 011, wat wil zeggen GP2 = verbonden met COUT van de comparator en GP1 als analoge ingang

In onderstaand programmatje puls ik GP0 om te zien dat m'n code werkt, en GP2, die verbonden zou moeten zijn met de comparator en niet met de betreffende uitgang van het PORT register.

MAAR: GP2 pulst ook, dus die is naar de PORT latch geschakeld, niet naar COUT zoals ik wil.

Ik zie iets ongelofelijks stoms over het hoofd maar weet niet wat. Jullie collectieve wijsheid is bijzonder welkom:
code:

W               equ     d'0'
F               equ     d'1'


        __config        b'00000111000100'

        errorlevel      -302            ;assembler bull

PCL             equ     h'0002'
STATUS          equ     h'0003'
PORTA           equ     h'0005'
INTCON          equ     h'000b'
CMCON           equ     h'0019'
OPTION_REG      equ     h'0081'
TRISA           equ     h'0085'
WPU             equ     h'0095'
VRCON           equ     h'0099'

RP1             equ     h'0006'
RP0             equ     h'0005'
Z               equ     h'0002'
DC              equ     h'0001'
C               equ     h'0000'


        org     h'0000'
        goto    Init

Init    ;Initialisation
        org     h'0008'
        bsf     STATUS,RP0
        bcf     STATUS,RP1

        movlw   b'00000000'
        movwf   OPTION_REG

        clrf    INTCON

        movlw   b'00111010'
        movwf   TRISA

        movlw   b'00000001'
        movwf   WPU

        bcf     STATUS,RP0

        movlw   b'00000011'
        movwf   CMCON

Main    ;Main loop
        bsf     PORTA,0
        bsf     PORTA,2
        bcf     PORTA,0
        bcf     PORTA,2
        goto    Main

        end


Waarom hangt GP2 niet aan COUT?

Alvast bedankt,

Geert Jan
Arco

Je kunt natuurlijk bsf/bcf niet op de comparator output gebruiken. (Porta bestaat trouwens helemaal niet in een 675, heet GPIO. Beter om de MChip include files te gebruiken en het zelf gedefinieerde spul weg te laten. Zo houdt je alles universeel)
Arco
GeertJan

quote:
Je kunt natuurlijk bsf/bcf niet op de comparator output gebruiken. (Porta bestaat trouwens helemaal niet in een 675, heet GPIO.


Klopt. In configuratie 011 zou GP2 en GP1 aan een comparator moeten hangen,
en de andere ingang van de comparator aan Vref.

Maar dat werkte niet: wat ik ook met GP1 (- ingang comparator) deed, GP2 bleef stil.
(het pulsen van GP0 is bedoeld om te laten zien dat de code runt).

Omdat de digitale uitgang van GP2 geMUXed wordt tussen de GPIO logica en COUT, de uitgang van de comparator, heb ik voor de gein GP2 mee gepulsed, en dat bleek dus te werken: kortom, de MUX voor GP2 staat in de verkeerde stand.
En ik begrijp nog steeds niet waarom.

quote:
Beter om de MChip include files te gebruiken en het zelf gedefinieerde spul weg te laten. Zo houdt je alles universeel)


Klopt. MAAR, de code is ontwikkeld op een 16F628 en werkt daar, maar ik wil naar de 12F675 (uiteindelijk 12hv609) in verband met real estate issues.
Omdat ik alle pinnen zal gebruiken, maakt dit in-circuit programmeren / testen lastig. Daarom geprototyped op de 16F628, daar werkt 't, vervolgens register voor register geported naar de 12F675 (waar registers op een andere plek zitten en subtiel anders zijn). Op de 675 werkte het niet en heb ik de code verder gereduceerd om het probleem te kunnen demonstreren.

Hoe krijg ik die MUX op GP2 om?

Geert Jan
[Bericht gewijzigd door GeertJan op 5 september 2008 14:07:14]
Zonnepaneeltje
Golden Member

Je hebt ANSEL niet ingesteld.
Mijn mini-voeding levert 12,2W/dm3 op de subsonic-scale
Zoeken in topic