Ik ben al een tijdje bezig met programmeeren van een pic 16f628a. Ledje laten knippere enzo.. Laatst eeen paar schuifregisters bestelt omdat ik hier eens mee wou experimenteren omdat ik ooit eens een ledkubus zou willen maken.
Dus een pic 16F628A aan gesloten op een 74hc595, ik verstuur in mijn programma 10 keer 1 byte (of 8 bitjes) deze worden dan door het schuifregister op een 7 segments display getoont.
De bedoel is dat ik van 0 tot 9 kan tellen (ja kan ik:d maar is bedoeling op het 7 segments display:p). Mijn programma werkt echter half... Er zijn cijfers te zien, maar er ontbreken er steeds een paar. Precies alsof dat de communicatie tussen de PIC 16F28A en de 74HC595 af en toe mis loopt? Als ik de voeding af zet en terug op merk ik wel dat het ritme anders word ( dit gebeurt tevens ook soms als ik een condensator bij plaats), dus eene keer 1,3,6,8,0 andere keer dan weer 4,8,0 soms toont hij meer cijfers soms minder.. als hij een paar cijfers overslaat is er wel altijd een pauze (eigenlijk de tijd dat de ontbrekende letters zouden moeten branden) Ik heb over iedere ic een condensator geplaatst van 100nf. Heb al verschillende voedingen gebruikt, en werk nu met een spanningsregelaar die 5 volt maakt van een 12 volt voeding.
Ik programmeer in asm. Wat ik ookal heb geprobeerd is op sommige plaatsen een nop functie te plaatsen zodat het schuifregister de pic wel kan volgen, maar dit zou normaal geen probleem mogen zijn..
Iemand enig idee wat dit zou kunnen zijn? Na 2 dagen prutsen en zoeken zie ik de bomen door het bos niet meer..
Alvast bedankt mensen!
AC/DrieC
Den Dries www.hulens.be
Tussen het tonen van de cijfers heb je een bepaalde wacht tijd voorzien?
En de tijd tussen het inshiften van de verschillende bits is ook niet te snel voor de 74hc?
plantrekker
True story bro!
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Als ik de voeding af zet en terug op merk ik wel dat het ritme anders word ( dit gebeurt tevens ook soms als ik een condensator bij plaats)
Alle ingangspinnen van de '595 aangesloten?
-En de tijd tussen het inshiften van de verschillende bits is ook niet te snel voor de 74hc? Hier dacht ik dus ook al aan, met paar nop functies tussen levert dit geen beter resultaat op..
-Alle ingangspinnen van de '595 aangesloten? De datalijn voor de bitjes, de latch, en de clock voor na ieder bitje zijn aangesloten.
daarlangs zijn uiteraard al de uitgangn (Q0 tot Q7 aangesloten op het 7segments display.
Zal de volledige code posten:
; Kies de juiste microcontroller
LIST P=16F628; Deze file maak programmeren iets gemakkelijker
include <P16F628.INC>
__CONFIG _CP_OFF & _DATA_CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF
ERRORLEVEL -302 ; Zet waarschuwing uit: Register in operand not in bank 0CBLOCK 0x20 ; free 16F628 RAM starts at 0x20(depends on type microcontroller)
cntr1
cntr2
cntr3
ENDC;namen koppelen aan poortpinnen maakt programmeren iets makkelijker.
;Deze zijn voor het swichen van banken
#define BANK0 bcf STATUS,RP0 ; RAM PAGE 0
#define BANK1 bsf STATUS,RP0 ; RAM PAGE 1#define latch PORTA,2 ;dit is de latch
#define data1 PORTB,4
#define klokingang PORTB,5;startadres van de controller
org 0x0000; Al de pinnen digitaal maken
movlw D'7' ;
movwf CMCON ; Comparators off, all pins digital I/O; Reset de poort waarden
clrf PORTA
clrf PORTB; defineer jouw pin indeling (input/output)
BANK1 ; Ga naar bank 1
movlw b'11111000' ;
movwf TRISA ; PORTA = inputs behalve 0-3 zijn outputs
movlw b'00000000' ;
movwf TRISB ; PORTB = outputs
BANK0 ; Ga terug naar bank 0
;--------------------------------------------------------------------------;--------------------------------------------------------------------------
; Hoofdprogramma
;--------------------------------------------------------------------------main
; schuifregister ==> 1 (01100000)
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
call latchh; schuifregister ==> 2 (00111110)
bcf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
call latchh; schuifregister ==> 3 (01111100)
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
call latchh; schuifregister ==> 4 (01101001)
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
call latchh; schuifregister ==> 5 (01011101)
bcf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
call latchh; schuifregister ==> 6 (01011111)
bcf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
call latchh; schuifregister ==> 7 (01110000)
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
bcf data1
call klok1
call latchh; schuifregister ==> 8 (01111111)
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
call latchh; schuifregister ==> 9 (01111101)
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
call latchh; schuifregister ==> 0 (01110111)
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bcf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
bsf data1
call klok1
call latchhgoto main
;subroutines
klok1 ;Bevestiging dat eerste bit doorgegeven is
bsf klokingang
nop
nop
bcf klokingang
returnlatchh ;Bevestiging dat al de 8 bits doorgegeven zijn
bsf latch ;latch is hoog dus resultaat zou te zien moeten zijn op de uitgangs pinnen van registers
call delay
bcf latch
nopreturn
; vertraag routines
delay_100ms
movlw D'1'
goto delaydelay_300ms
movlw D'3'
goto delaydelay_500ms
movlw D'5'
goto delaydelay_1s
movlw D'10'
goto delay; This code creates a delay with a multiply of 99975 instructions.
; At 4Mhz this is approx. 100 milliseconds.
; BEWARE : If you call this routine with w = 0 then this delay is 256 x 0,1 = 25,6 secondsdelay movlw D'5'
movwf cntr3
delay1 movlw 0x82
movwf cntr2
delay2 movlw 0xff
movwf cntr1
delay3 decfsz cntr1, f
goto delay3
decfsz cntr2, f
goto delay2
decfsz cntr3, f
goto delay1
return
END
Een hele lap code.. sorry als ik te veel gepost heb, maar je weet maar noit waar de fout zit:)
Benadski
Kom eens langs bij RevSpace of één van de andere spaces!
Master reset? Output enable? Beide clocks? Alle ingangen moeten verbonden zijn, aan GND, VCC of de uC, niets mag zweven...
Schema + foto print (beide zijden) zou erg mooi zijn ...
