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

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:)
http://www.turbokeu.com/myprojects/ledclock/all.jpg
[/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.

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...

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.

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

Nee, de PIC16F690

20Mhz is nogal overkill

Dat klopt, het is ook alleen een voorbeeld. Dan heeft TS ook nog wat te doen ;)

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 ?