Shift register (74HC595)

24 mei 2009

Het aantal uitgangen van een PIC kun je bijna oneindig uitbreiden met een shift register. Dit projectje laat een 12F629 gekoppeld aan een 74HC595 zien. Het shift register laat acht LEDs oplichten.

Filmpje:

Het shift register is eenvoudig aan te sturen. De data wordt serieel in geklokt, na dat alle bits verzonden zijn, wordt via de latch klok de data op de 8 uitgangen gezet. De 74595 is aangesloten op de GP0, GP1 en GP2 aansluitingen van de PIC.

De shift_out routine:

DATAIN  equ GP2
SHIFT   equ GP1
LATCH   equ GP0
shift_out
    movwf tmp
    movlw 0x8
    movwf bits
loop1
    rlf tmp, f
    btfsc STATUS,C
    bsf GPIO, DATAIN
    btfss STATUS,C
    bcf GPIO, DATAIN
    nop
    bsf GPIO, SHIFT
    nop
    bcf GPIO, SHIFT
    decfsz bits, f
    goto loop1
    bsf GPIO, LATCH
    nop
    bcf GPIO, LATCH
    return

De data die de LEDs laat branden staat in code-memory en wordt uitgelezen via een computed-goto

data_array
    addwf PCL, f
    retlw B'00000000'
    retlw B'00000001'
    retlw B'00000010'
    retlw B'00000100'
    retlw B'00001000'
    retlw B'00010000'
    retlw B'00100000'
    retlw B'01000000'
    retlw B'10000000'
    retlw B'11111111'
    retlw B'00000000'
    retlw B'11111111'
    retlw B'00000000'
    retlw B'11111111'

Complete asm-file. Hex-file.

Schema:

Schema looplicht met 74595

Schema looplicht met 74595 (5V en Grond aansluitingen met ontkoppel-C's zijn weggelaten.)

Advertenties

Piklab, ICD2 debugger en programmer

18 mei 2009

Voor het programmeren van de PIC gebruik ik de Piklab IDE onder linux. Deze ondersteunt een aantal compilers, gputils voor het programmeren in assembler en een simulator. Ook ondersteund deze een aantal gangbare programmers.

De programmer die ik gebruik is een debugger/programmer. Het is een kloon van de ICD2 programmer van Microchip. Deze maakt gebruik van de originele Microchip firmware. Het is deze. Het debuggen heb ik niet geprobeerd. Ik heb niet de goede PIC’s omdat te proberen.

Het schema gebruikt in deze post:

pic629blink

Of als bestand te openen met gschem: pic629blink.sch

Een screenshot van het project geopend in Piklab:
piklab

Links zie je de bestanden die bij het project horen, instellingen voor het type PIC en een aantal debug vensters. In het midden worden de geopende bestanden getoond.

Voor het gebruik van de ICD2 programmer stel je Piklab in zoals in onderstaande screenshot:
piklab1
De ICD2 is nog niet aangesloten bij het maken van deze screenshot. Daardoor de connection: error. Bij het specific tabblad moet je de plek waar de firmware voor de programmer is opgeslagen aangeven. Ik heb MPLAB onder wine geïnstalleerd, dan wordt de firmware ook op de opgeslagen. Deze geef ik aan in de configuratie van Piklab.

Na het compileren kun je de PIC programmeren met het menu “Programmer”. Met dit menu kun je ook de PIC uitlezen. Bij het programmeren met de versie van Piklab die ik gebruik, crashed Piklab helaas.
ASSERT: "end<data.count()" in pic_prog_specific.cpp (35)
ASSERT: "mask" in pic_memory.cpp (287)
KCrash: Application 'piklab' crashing...

De workarround is het programmeren van de PIC via de commandline. Voor mijn programmer is het commando:

piklab-prog -c program -d 12f629 -p icd2 -t usb knipper-12f629-int-asm.hex

Dit werkt prima. Ook als de Piklab IDE zelf ook draait.

De asm-file en hex-file van het getoonde project in Piklab.