pic16

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Chaf
Inlägg: 540
Blev medlem: 9 februari 2008, 11:05:31
Ort: Stockholm

pic16

Inlägg av Chaf »

Hej :D
Skulle behöva hjälp att programmera en pic16 för 7 segments 8st
tid & år har pickit 3 men fixar inte.
M.v.h
Christer
Användarvisningsbild
Icecap
Inlägg: 25031
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: pic16

Inlägg av Icecap »

Menar du hjälp som i hur gör man eller kan du inte få PICkit att programmera kretsen?
Är det hjälp med hur programmet ska fungera eller något helt annat?
Chaf
Inlägg: 540
Blev medlem: 9 februari 2008, 11:05:31
Ort: Stockholm

Re: pic16

Inlägg av Chaf »

Hej
Hoppas på hjälp att programmera den
M.v.h
Christer
Chaf
Inlägg: 540
Blev medlem: 9 februari 2008, 11:05:31
Ort: Stockholm

Re: pic16

Inlägg av Chaf »

Hej
Hoppas på hjälp att programmera den finns cod för 4 segment
M.v.h
Christer
Användarvisningsbild
JimmyAndersson
Inlägg: 25705
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: pic16

Inlägg av JimmyAndersson »

Du skriver lite för kortfattat för att vi ska kunna förstå. :)

” Skulle behöva hjälp att programmera en pic16 för 7 segments 8st”

” finns cod för 4 segment”

Jag tolkar det som att det finns kod för att styra 4st segment, men du vill ha hjälp med att skriva om koden så att din PIC16 kan styra 8st vanliga 7-segments LED-display.
Tolkat jag det rätt?

Isåfall behöver vi veta:
1) Hur det är kopplat, så att rätt utgång kan styra rätt segment.
2) Om displayerna har gemensam anod eller katod.
3) Troligen ska ju något göra att vissa specifika siffror visas, t.ex tiden. Finns den delen av koden?
4) Vilket programmeringsspråk är den nuvarande koden skriven i?

Av nyfikenhet: Vilken PIC16 är det?
Senast redigerad av JimmyAndersson 21 september 2021, 01:02:32, redigerad totalt 1 gång.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 40163
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: pic16

Inlägg av sodjan »

"PIC16" är en hel familj av processorer av väldigt olika typ och modell.
Vilken PIC16 gäller det? Har du redan processorn?
Har du länk till det som ska "programmeras" i den?

EDIT: Personligen gissar jag att "4 segment" var ett stavfel. Men vem vet...
Användarvisningsbild
JimmyAndersson
Inlägg: 25705
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: pic16

Inlägg av JimmyAndersson »

Ha! Jag lade till den frågan innan jag såg ditt inlägg. :) :oops:
Användarvisningsbild
rvl
Inlägg: 3220
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: pic16

Inlägg av rvl »

Har du testat den nämnda koden med fyra siffror? Fungerar i såfall allt som det ska då?
Användarvisningsbild
Icecap
Inlägg: 25031
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: pic16

Inlägg av Icecap »

Och jag kom på lite problem med att styra 8 siffror: Intensitet kontra ström.

Tar vi en 40-pin PIC16F873A (jepp, gammal modell) har den en maximal ström"genomgång" på ung. 200mA om jag inte minns fel. Med ett pincount på 56 vid direktdrivning kan man som bäst multiplexa 1:2 vid att ha 4 siffror åt gången tända.

Detta ger att en medelström per segment på 6,7mA, detta är ganska synbart i vardagsrumsbelysning men BARA med högeffektiva LED.

Kör man med 1:8 multiplexing blir det en toppström per segment på 20mA (max. per utgång) och 2,5mA i medel. Detta är än mindre synbart.

Planering behövs i detta skede alltså.

Sedan var det tiden...
Ska tiden hållas med extern RTC med batteri-back-up kan det vara värd att välja en med bra tidshållning och 1 sek puls ut.

Vid uppstart läser man tiden och kastar in i intern minne (yyyy, mt, dy, hr, mi, se) för vidare arbete.

Då behöver man bara att stega upp sekunderna med 1 per steg, hålla koll på 60, 60, 24 osv. Jag har en relativ enkel formel för uträkning av skottår som man kan lägga in - och plötsligt har man en klocka som faktisk fungerar utan för mycket tjafs.

Om det alltså inte var för att den blir svår att se pga. låg intensitet.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 5632
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: pic16

Inlägg av Marta »

Har byggt med 1:8 mux och moderna displayer med bra ljus och det syns jättebra. 8 pinnar för 8 siffror charlieplex utan decimalpunkt. Kräver bara de 8 sedvanliga motstånden till LED, samt en transistor per siffra.

Det enklaste och bästa är att skriva sådant i assembler. Är ju hantering på bitnivåhela tiden. En interruptrutin får scanna displayerna från minnespositioner som lagrar mönstret. Då kan den enkelt och lätt visa alla krumelurer som är möjliga med en 7-segment.

Finns intresse kan jag posta en bit av koden, men det är inte Microchip assembler.

Edit: Här är en bit av koden i all sin fulhet... Kanske mera stjälp än hjälp...


******  TMR0 INTERRUPT ROUTINE, THIS DOES THE DISPLAY CHARLIEPLEXING
*
T0IRQ   LOD INTSAV.T0A,A        SAVE REGS
        SWN A=STATUS
        LOD INTSAV.T0STAT,A
        LOD A,IADRES
        LOD INTSAV.T0IADR,A
        CLF BSELA               SET BANK0
        STZ TMR1L               STOP TIMER1 (DISPLAY INTENSITY) FROM INTERRUPT
        CLF T0IF                CLEAR DISPLAY RELATED INTFLAGS
        CLF T1IF
        SEF GIE                 MASTER IRQ ENABLE


        *                       HANDLE RECEIVER RESET TIMEOUTS
        CLF GIE                 STOP RX DURING PARTIAL RESET
        SFC RX.RESET            TIME TO RESET RECEIVER?
        JMP .NORES              NO
        STZ RX.FLAGS            RESET FLAGS
        STZ RX.INPNT            RESET INPUT POINTER
        STZ RX.SHIFT            INIT SHIFT TO COUNT BITS
        INC RX.SHIFT
        STZ RX.CRC              RESET CRC
.NORES  CLF RX.RESET            FLAG RESET NXT TIME IF NO ACTIVITY
        SEF GIE

        STZ PORTC               TURN OFF DISPLAY TO STOP GHOSTING
        LOD A,#$04
        AND PORTA,A

        CLF CY                  SHIFT DIGIT SCAN BIT
        ROR DISPLY.CBIT
        TFZ DISPLY.CBIT         ALL DIGITS DONE?
        SFS Z
        JMP .NOINIT             NO-DON'T INIT
        INC DISPLY.BTIMER       INC BLINK TIMER, PLACED HERE TO GET 1/8 PERIOD
        LOD A,#DISPLY.START     INIT DIGIT POS^
        LOD DISPLY.CDIGIT,A
        SMB DISPLY.CBIT,7       INIT DIGIT SCAN BIT

.NOINIT DEC DISPLY.CDIGIT       NXT DIGIT POS
        LOD A,DISPLY.CDIGIT     GET DIGIT POS
        LOD IADRES,A            ADDRESS DIGIT

        STZ DISPLY.PORTA        INIT BUILD OF PORTA DATA

        *                       GET AND INSERT CHARLIEPLEX BIT
        LOD A,DISPLY.CBIT       GET CHARLIEPLEX POSITION
        AND A,IDATA             MASK OUT CHARLIEPLEX BIT
        ADD A,#-1               PUT CHARLIEPLEX BIT INTO CY

        *                       INSERT CBIT INTO PORTA BITS AND FINALIZE THEM
        ROR DISPLY.PORTA        INSERT CHARLIEPLEX BIT FROM CY
        ROR DISPLY.PORTA        SHIFT IT INTO POSITION
        SWN DISPLY.PORTA        CHARLIEPLEX BIT INTO BIT3
        ROR A=DISPLY.CBIT       GET CBIT ONE TO THE RIGHT
        AND A,#$60              MASK OUT FOR DIGITS WITH ANODE IN PORTA
        ORR DISPLY.PORTA,A      OR IN INTO PORTA BITS
        ROR DISPLY.PORTA        PORTA BITS ARE NOW READY

        *                       SET TRIS REGISTERS
        SEF BSELA               BANK1
        LOD A,DISPLY.CBIT       GET CBIT..
        EOR A,#-1               ..INVERTED
        AND A,IDATA             GET DISPLAY DATA WITH CHARLIEPLEX BIT CLEARED
        LOD TRISC,A             SET TRISC, UPPER 2 BITS ARE DONT CARE
        LOD DISPLY.PAD,A        PUT BITS HERE FOR SHIFT
        ROR DISPLY.PAD          PUT THEM INTO POSITION
        ROR A=DISPLY.PAD
        AND A,#$30              MASK OUT
        ORR A,#$0C              THOSE BITS ARE INPUTS = TRIS BITS ALWAYS SET
        LOD TRISA,A             SET TRISA, JUST BITS 5,6 CONTAINS DATA
        CLF BSELA               BANK0

        *                       DO BLINK
        LOD A,DISPLY.CBIT       GET DIGIT MASK
        AND A,DISPLY.BFLAGS     BLINK THIS DIGIT?
        SFS Z
        JMP .NOBLK              NO-ALWAYS TURN ON
        LOD A,DISPLY.BTIMER     GET BLINK TIMER
        AND A,#$30              ASYMMETRICAL BLINK
        SFC Z
        JMP .BLKOFF             NO TURNON FOR BLINK DARK PERIOD

        *                       TURN ON DISPLAY BY SETTING DATA BITS
.NOBLK  LOD A,DISPLY.PORTA      GET PREPARED PORTA DATA
        LOD PORTA,A             SET THIS FIRST TO AVOID CHARLIEPLEX BIT GHOSTING
        LOD A,DISPLY.CBIT       CBIT IS PORTC DATA
        LOD PORTC,A

        *                       DO INTENSITY CONTROL
.BLKOFF LOD A,#-1               SET INTENSITY TIMER
        LOD TMR1H,A
        LOD A,DISPLY.INTENS
        LOD TMR1L,A

.DONE   LOD A,INTSAV.T0IADR     RESTORE REGS
        LOD IADRES,A
        SWN A=INTSAV.T0STAT
        LOD STATUS,A
        SWN INTSAV.T0A
        SWN A=INTSAV.T0A
        RTI                     IRQRTN DONE



***     TIMER 1 INTERRUPT, INTENSITY CONTROL
*
T1IRQ   LOD INTSAV.T1A,A        SAVE REGS
        SWN A=STATUS
        LOD INTSAV.T1STAT,A
        CLF BSELA               SET BANK0
        CLF T1IF

        LOD A,DISPLY.CBIT       GET CHARLIEPLEX BIT
        AND A,#$3F              NO GHOSTING, ANODE BIT IN PORTC?
        SFS Z
        STZ PORTC               YES-TURN OFF THIS FIRST
        STZ PORTA               TURN OFF DISPLAY
        STZ PORTC

        SWN A=INTSAV.T1STAT     RESTORE REGS
        LOD STATUS,A
        SWN INTSAV.T1A
        SWN A=INTSAV.T1A
        RTI                     IRQRTN DONE


Skriv svar