Beste allemaal,
Zoek al dagen op internet naar de mogelijkheden om een up counter te maken, verschillende ideen zijn al gepasseerd, maar kom er nog niet helemaal uit...
Wat heb ik nodig ?
Een seconden teller die als je hem aan zet tot 120 seconden telt, dan een piepje geeft en weer opnieuw begint met tellen tot 120. De seconden moeten zichtbaar zijn op een 7 segment led display.
Heeft iemand een idee hoe ik dit het handigst kan oplossen ???
Bedankt alvast voor het meedenken.
met vriendelijke groet,
Peter
in een pic/avr of wat dan ook een interrupts routine maken die precies elke seconde wordt aangeroepen.
dan een stukje pseudo code
InterruptRoutine() {
_1_secondeTikInt = 1;
}
main() {
UINT8 _1_secondeTikInt = 0;
UINT8 teller = 0;
while(1) {
if (_1_secondeTikInt) {
if(++teller > 120) {
PiepAan();
teller = 0;
}
ToonTellerOpDisplay();
}
}
dan zelf een fucntie maken om een piepje aan te zetten en om de variabele teller op een 7 segment display te zetten.
Je zou het ook nog geheel uit logische ic`s kunnen bouwen.
het kan op zich allebei.
in het geval van een pic kun je bijvoorbeeld 2x7 uitgangen nemen voor het 7 segment display en dan nog een enkele uitgang voor het honderd-tal (is toch alleen 1 of niks).
als je gaat voor digitale ic's moet je zoiets hebben denk ik:
http://www.circuitsonline.net/schakelingen/21/meten-en-testen/digitale…
en dat dan 2x. 1 voor enkele getallen en 1 voor 10-tallen. dan achteraan nog een schakelingetje (geheugenpoort is het makkelijkste denk ik) dat de 100 aan en uit kan zetten (en houden).
dan moet je het zo aansluiten dat bij een getal van 009 hij bij de volgende klokpuls de eerste reset en de 2e er 1 bij laat tellen. (dan krijg je 010. en bij 099 net zoiets. dan laat je hem de geheugenpoort triggeren zodat de 100 aan gaat.
om alles te resetten moet je dmv wat logica (and-gates) een schakelingetje maken die hoog wordt zodra de alle bits voor 120 hoog zijn. dit dan doorverbinden naar alle resets en een eventuele buzzer.
hoe je de tellers in serie moet zetten moet je even in de datasheet kijken.
al moet ik zeggen dat kwa schakeling, de pic het eenvoudigst is. Alleen moet je dan de software goed getimed maken. Als je dat kan, dan is het wel zo mooi om maar 1 ic te gebruiken denk ik.
Zo wat snel al zulke goeie reactie's !!!
Fijn dat er mensen zijn die mee willen denken.
Het mooiste is om het zo simpel en klein mogelijk te maken, dus daarom sprak zo'n PIC me aan. Ik heb er alleen nog nooit mee gewerkt, laat staan dus geprogrammeerd...
Ik hoopte daar op internet veel over te vinden, en dat lukt ook wel.. alleen het is altijd net niet wat je zoekt... (wel bekend waarschijnlijk).
De counter willen we op het werk gaan gebruiken. Ik werk als ambulance verpleegkundige en bij een reanimatie zijn de 2 minuten 'blokken' erg strak ( je moet bepaalde handelingen binnen die 2 minuten doen).
Als jullie nog goeie ideen hebben graag.... hoe meer hoe beter !!!
groetjes
Peter
EricP
mét CE
Zoek je een hobbyproject? Of iets wat het gewoon doet? als je een frutselproject zoekt, kom je wellicht nog wel ergens met zo'n ding van micochip. Als het gewoon moet werken... wellicht V&A en iemand die het voor je maakt?
Het nodigt wel uit voor een μC of eventueel zo'n microchip ding ja... Zeker als het klein moet zijn. Gezien de LED displays, zal stroomverbruik geen issue moeten zijn...
ok het gaat dus wel om een timer die betrouwbaar moet zijn en ook zo nauwkeurig mogelijk moet werken.
dan kun je denk ik het beste voor een uC gaan. daarvan kun je de kloksnelheid bepalen met een extern kristal. Die zijn lekker nauwkeurig. Bij de digitale ic's kom je meestal uit op RC triggers die het aardig doen, maar een stuk minder nauwkeurig zijn.
Als leesvoer zou ik maar eens beginnen op picbasic.nl
een goede site om te beginnen. Veel ideeen en een goede tutorial
ben niet bekend met de pic registers, maar met een AVR steld de code echt heel weinig voor.
Als het een batterij gevoed kastje moet worden, wordt de levensduur niet gek lang als je met led displays werkt. Je zou dan eigenlijk een lcd moeten hebben (en dan geen hd44780), maar die vind je niet zo 123 denk ik.
die 3.5 digit lcd's zijn wel te koop
bijvoorbeeld hier:
http://www2.conrad.nl/goto.php?artikel=185663
die zijn ook nog wel goedkoper te krijgen als je even zoekt.
maar ik vermoedt dat het ten alle tijden goed leesbaar moet zijn. dan is led denk ik wel makkelijker/beter. LCD met backlight werkt ook wel goed, maar led blijft een stuk helderder vermoed ik.
dan is het afwegen wat je belangrijker vindt
[Bericht gewijzigd door timberleek op (42%)]
Het geheel moet inderdaad 'redelijk' nauwkeurig zijn. Een seconde afwijking is niet zo heel erg, maar het moet niet zo zijn dat als je tien minuten verder bent je een verloop van een minuut hebt..
Een LCD is geen goeie optie.... Die zijn niet in alle omstandheden goed afleesbaar (denk aan de afleeshoek, maar ook in het donker slecht zichtbaar) Dan liever een keer extra een batterij vervangen.
(een reanimatie tot aan het ziekenhuis duurt niet langer dan een uur, als ie het zo lang maar blijft doen)
Enne, het moet het natuurlijk wel doen.. da's logisch, maar het mag best een hobby projectie zijn hoor. Ben niet vies van de soldeerbout
Juist wel leuk om er zo met elkaar uit te komen !!!!
(ik sta er echt versteld van dat er zo snel meegedacht wordt, dat steunt me weer in het vertrouwen er wel uit te komen).
een puntje om ook over na te denken is wat voor formaat je het wilt hebben.
en dan doel ik zowel op het algehele 'apparaat' als de led displays
die displays zijn namelijk in allerlei maten te krijgen
laatst had er iemand ene verzameling op een foto staan. allerlei maten.
maar ik weet niet meer waar die staan
een uur moet wel lukken.
Maar je wilt natuurlijk niet bij elke reanimatie eerst de batterij vervangen.
Als je het echt mooi wilt doen, maak je een oplaad circuitje erbij.
Maar das misschien voor later.
Ik zou gewoon voor 3 7 segment displays gaan en die scannend aansturen. dwz dat je er steeds maar fysiek 1 tegelijkertijd aan hebt staan.
dus de software doet continu:
zet secondes op display poort en enable dan display 1.
wacht even
disable display 1
zet tientallen secondes op display poort en enable dan display 2
wacht even
disable display 2
zet minuten op display poort en enable dan display 3
wacht even
disable display 3
het is wat meer programmeer werk, maar het scheelt wel in het stroomverbruik.
met een microcontroller haal je makkelijk een nauwkeurige 2 minuten.
zoveel verloopt het nou ook weer niet, maar met een kristal haal je het zowieso
[edit] dit plaatje van turbokue bedoelt ie vast:)
[/edit]
Juist vanwege de vele beschikbare formaten, moeten we daar wel kunnen komen denk ik.
Er hoeven niet veel knopjes op te zitten (alleen maar aan en uit en starten) en we zijn natuurlijk
altijd dicht bij de patient, dus het hoeven niet hele grote display's te zijn..
Formaat van een beetje mobiele telefoon ???!!
[De 14 mm display's zijn denk ik heel goed bruikbaar ]
@ Stijnos : Voor een reanimatie een batterij verwisselen is niet handig inderdaad, maar erna is geen probleem... Opladen is ook weer lastig.. maar met die draadloze oplaad mogelijkheden van tegenwoordig is er misschien nog wel iets denkbaar 
(inderdaad voor latere zorg...)
Maar als ik jou manier zou gebruiken zie ik dus niet de hele tijd de seconde's 'wegtikken'
Zou je ook een suggestie kunnen doen voor een geschikte PIC ??
Ben al druk aan het lezen op picbasic.nl
(wat een mogelijkheden zeg !!)
dat plaatje bedoelde ik inderdaad.
Je ziet zelf bijna geen verschil als je ze gaat multiplexen. Het lijkt misschien of ze iets minder fel branden, maar verder schakelen ze zo snel over dat je het niet kan zien.
zo'n PIC loopt op een kloksnelheid van ettelijke megahertzen. Dus hij raast door de code heen.
Heb een mooie link gevonden dankzij jullie hulp...
Zou dit wat zijn ? En dan het programma aanpassen zodat er niet omlaag wordt geteld, maar omhoog ?
Oh da's jammer... zie net dat de linkjes op die pagina niet werken.....
http://www.webx.dk/oz2cpu/clock/countdown.htm
[Bericht gewijzigd door Peter494 op (16%)]
dat hoeft misschien nog niet eens. je kan hem ook aanpassen dat hij zichzelf instelt op 120 en dan bij 0 reset.
dan gaat hij wel de andere kant op, maar het resultaat is hetzelfde.
EricP
mét CE
Voor een AVR heb ik de code wel min of meer hapklaar voor je. Dat multiplexen in software stelt echt geen zak voor. Heel ander project, maar alles wat je nodig hebt zit al in de hardware, alleen de software ff bakken. Alles met voldoende I/O voldoet. Tiny2313 ofzo?
Heb de datasheet van de Tiny2313 even opgezocht...
http://freedatasheets.com/downloads/ATtiny2313.pdf
Enne daar heb ik de komende dagen denk ik wel weer wat leesvoer aan....
Eens kijken of we tot een mooi schema'tje kunnen komen...
EricP
mét CE
Ja, da's een stukje leesvoer. Gelukkig hoef je lang niet alles te snappen om dit te maken.
Schema... stelt geen zak voor. 3 7-segment displays, zoals stynos al beschreef. Een AVR kan genoeg sinken om die dingen rechtstreeks aan te sturen, dus elk segment met een weerstandje naar een output pin, common anodes via PNP torretjes (of logic level FETjes, maar vermogen is toch minimaal) naar een andere pin... ISR op een timer die op 1kHz ofzo het spul lekker staat te multiplexen. 2de ISR (op een 2de timer) die je seconden bijhoudt... klaar. Ohja.. nog wat met een buzzer. Nou ja, poten zat...
Heb je niet ergens 'voeding' in die ambulance? Ding op batterijen lijkt me niet echt handig met LEDs. Aan de andere kant... Hoe lang zal het beest aan staan? Gaat best lang goed op 3 AA...
Maar zoals eerder geschreven... Je kunt het merendeel zo krijgen.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Heb deze code even wat aangepast, telt nu van 0...120.
Kristal 20MHz, segmenten aan portC, displays aan portB 4...7
#include <p16F690.inc>
__config (_HS_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
radix dec
pclath_temp equ 0x70
w_temp equ 0x71
status_temp equ 0x72
digcount equ 0x73
digit1 equ 0x74
digit2 equ 0x75
digit3 equ 0x76
digit4 equ 0x77
seccount equ 0x78
flags equ 0x79
#define fsecond flags,0
maxdigits equ d'4'
set_disp macro d4, d3, d2, d1
movlw d4
movwf digit4
movlw d3
movwf digit3
movlw d2
movwf digit2
movlw d1
movwf digit1
clrf seccount
bcf fsecond
endm
;==============================================================================
; Program start
;------------------------------------------------------------------------------
org 0x000
goto Init
;==============================================================================
; Interrupt routine
;------------------------------------------------------------------------------
Irq org 0x004
;--------------------------------------------------------------
; Context saving
;--------------------------------------------------------------
movwf w_temp
movf status,w
movwf status_temp
movf pclath,w
movwf pclath_temp
;--------------------------------------------------------------
; See if timer 2 interrupt
;--------------------------------------------------------------
banksel pir1
btfss pir1,tmr2if
goto restore
;--------------------------------------------------------------
; 1 second count
;--------------------------------------------------------------
incf seccount,f
movf seccount,w
xorlw d'250'
btfss status,z
goto irq_disp
clrf seccount
bsf fsecond
;--------------------------------------------------------------
; Display update
;--------------------------------------------------------------
irq_disp movf digcount,w
banksel portb
call digtab
movwf portb
movlw digit1
movwf fsr
movf digcount,w
addwf fsr,f
movf indf,w
call segtab
movwf portc
incf digcount,f
movf digcount,w
xorlw maxdigits
btfsc status,z
clrf digcount
;--------------------------------------------------------------
; Clear interrupt flag
;--------------------------------------------------------------
banksel pir1
bcf pir1,tmr2if
goto restore
;--------------------------------------------------------------
; Segment tab. Uses portC <6:0>
;--------------------------------------------------------------
segtab addwf pcl,f
dt 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
;--------------------------------------------------------------
; Digit tab. Uses portB <7:4>
;--------------------------------------------------------------
digtab addwf pcl,f
dt 0x80,0x40,0x20,0x10
;--------------------------------------------------------------
; Context restore
;--------------------------------------------------------------
restore movf pclath_temp,w
movwf pclath
movf status_temp,w
movwf status
swapf w_temp,f
swapf w_temp,w
retfie
;==============================================================================
; Initialize
;------------------------------------------------------------------------------
Init
banksel pie1
bsf pie1,tmr2ie
clrf digcount
banksel t2con ;Timer 2 on
movlw b'00100111' ;Prescaler 16, postscaler 5
movwf t2con
banksel pr2 ;Timer 2 value
movlw d'249'
movwf pr2
bsf intcon,gie
bsf intcon,peie
banksel ansel ;All i/o digital
clrf ansel
clrf anselh
banksel trisa ;Set in/output
movlw b'00000111'
movwf trisa
movlw b'00000000'
movwf trisb
movlw b'10000000'
movwf trisc
;==============================================================================
; Main program
;------------------------------------------------------------------------------
main set_disp 0,0,0,0 ;Load with 00:00 (min:sec)
loop btfss fsecond ;Loop until second elapsed
goto loop
update incf digit1,f ;Update digits
movlw d'10'
xorwf digit1,w
btfss status,z
goto loop_end
movlw d'0'
movwf digit1
incf digit2,f
movlw d'10'
xorwf digit2,w
btfss status,z
goto loop_end
movlw d'0'
movwf digit2
incf digit3,f
movlw d'10'
xorwf digit3,w
btfss status,z
goto loop_end
movlw d'0'
movwf digit3
loop_end bcf fsecond
movlw d'1' ;Compare if > 120
xorwf digit1,w
btfss status,z
goto loop
movlw d'2'
xorwf digit2,w
btfss status,z
goto loop
movlw d'1'
xorwf digit3,w
btfsc status,z
goto main
goto loop
end
Ha EricP,
Zoals je het beschrijft lijkt het erg eenvoudig 
natuurlijk is er wel voeding (12V en 220V) maar het nadeel is dat dit apparaat op de LUCAS (http://www.youtube.com/watch?v=3M96sFP-0Xc) gemonteerd moet worden en die zit weer in een aparte tas. Het geheel moet overal werken, op straat, bij iemand in de huiskamer dus met voeding is sowieso niks, opladen zou dan nog wel kunnen, maar dan steken er weer draadjes uit de tas en dat is ook niet echt handig... Als je hem dan uit de auto trekt is alles natuurlijk stuk... en voorzichtig zijn de meeste ambulance jongens niet 
@Arco, is dit voor die tiny2313 ???
20Mhz is nogal overkill voor een ding dat 1x per sec telt en alleen een display hoeft te scannen. Kost alleen maar stroom zo`n hoge klok frequentie.
2Mhz is snel zat volgens mij
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Nee, de PIC16F690
20Mhz is nogal overkill
Dat klopt, het is ook alleen een voorbeeld. Dan heeft TS ook nog wat te doen 
EricP
mét CE
Schemaatje. Gejat uit een project van een ander, maar zo simpel is het... Voor die buzzer en 5V exemplaar nemen, kan die FET ook achterwege blijven.
Wat kan het snel gaan in een middagje
:)
De ambulance dienst waar ik werk, zal blij zijn met al jullie hulp !!!
Ehmmm.. maar voor dit ontwerp kan ik dan weer niet de software gebruiken zoals dat hierboven beschreven wordt, toch ?