Hallo mensen ik zit nu een beetje te kloten met microcontrollers. Ik heb nu dus de Attiny 13 deze heeft 6 i/o poorten. Daar zocht ik dus een toepassing voor, nouja het is dus een timer voor een belichtingsbak geworden.

Pin 0,1,2,3 = 7-Segment
Pin 4 = aansturing 2e 7-Segment
Pin 5 = Tijd instellen

Ik stuur een bcd code naar buiten. en converteer hem met een BCD to 7-Segments decoder.

Maar hoe stuur ik nou 2 van die segmenten aan.
Ik had zelf zoiets gedacht.

http://members.home.nl/mrhofman/AVR_timer.png

Stukje code geschreven.


.include "tn13def.inc"	 ; Gebruik Attiny 13

.def temp   	=	r16
.def Tientallen	=	r17
.def Eenheden	=	r18 
.def Tiental	=	r19

.org	0x00		  ; Begin adres
 		
 LDI	temp,0b001111     ;Set PORTB 0,1 als Input en
 OUT 	DDRB,temp         ; 2,3,4,5 als Output
 LDI    temp,0b110000
 OUT    PORTB,temp	  ; Set pull-up's PinB 0,1
 CLR	temp
 LDI	Eenheden,$0A
 LDI	Tientallen,$09
 RJMP 	Start

SEGMENT1:
 CPI	Eenheden,$00  
 BREQ	SET_SEGMENT1
 DEC	Eenheden
 RET

SEGMENT2:
 CPI	Tientallen,$00
 BREQ	SET_SEGMENT2
 DEC	Tientallen
 RET

SET_SEGMENT1:
 LDI	Eenheden,$0A
 RCALL 	Segment2
 RET
			
SET_SEGMENT2:
 LDI	Tientallen,$09
 RET


Start:
 RCALL	SEGMENT1  
 OUT	PORTB,Eenheden
 MOV	Tiental,Tientallen
 ORI	Tiental,0b010000
 OUT	PORTB,Tiental
 RJMP	START

hij zal het nu wel doen maar dat gaat natuurlijk harstikke snel, dus zou je er een delay moeten inbouwen die om de seconde er 1 van de waarde aftrekt, maar als ik dit doe blijft hij in de lus hangen.

maar ik wil zoiets van:

stuur waarde segment 1 naar buiten
stuur waarde segment 2 naar buiten

dat hij dit stukje steeds maar herhaald en pas na een seconde na een even naar een subroutine springt die er 1 van de waarde aftrekt en daarna gelijk weer terug springt.

zodat het display steeds aanstaat en niet hoeft te wachten op die ene sec.

Heeft die controller geen interrupts? Je kunt dan een ISR maken die 1 van de waarde aftrekt en in de hoofdlus doe je telkens het aansturen van de segmenten

Interrupt dat was het :).
Maar dan moet je met die timers gaan werken he? :S ik ga het even uitproberen.

Interrupt is gelukt. ik heb de timer overflow gebruikt.
maar nu een ander probleem.

Ik heb dus mijn hoofdlus waar ik de waarden naar de segmenten heen stuur, maar daar gebeurd iets raars..

Variable

Eenheden = $09
Tientallen = $09

Ik snap niet waar de waarde 8 vandaan komt?

zie dit filmpje:

http://members.home.nl/mrhofman/Probleem1.avi

Hee...
Dat is Cool!!! ;-)
Wat voor programma heb je daar draaien?
Is dat een PIC simmulator??

Hoe, wat en vooral WAAR kun je die krijgen/downloaden??

Ik moet altijd errug veel draadjes in mijn breadboard proppen voor ik iets kan doen!

By the way:
Ik kreeg meteen een "Monty Python" :-p Assosiatie doen ik je tekening/schema zag. Grappig gedaan!

Nog eens by the way:
Ik heb een soortgelijk probleem met het aansturen van 2 7-segments displays.
Misschien heb je er iets aan...
Staat in een topic. Kun je vinden onder mijn naam.

Op 16 juli 2005 20:57:20 schreef Fantomaz:
Hee...
Dat is Cool!!! ;-)
Wat voor programma heb je daar draaien?
Is dat een PIC simmulator??
Hoe, wat en vooral WAAR kun je die krijgen/downloaden??

Dat is een simulator voor AVR .
AVR-Studio heet het, kun je hier op de site gewoon downloaden.

By the way:
Ik kreeg meteen een "Monty Python" :-p Assosiatie doen ik je tekening/schema zag. Grappig gedaan!

:P

Nog eens by the way:
Ik heb een soortgelijk probleem met het aansturen van 2 7-segments displays.
Misschien heb je er iets aan...
Staat in een topic. Kun je vinden onder mijn naam.

Ik heb het gezien. Maar ik zit nu met een ander probleempje , de poorten doen niet wat ik wil(of is dat bij jou ook zo? , ff naar je topic kijken).

Op 16 juli 2005 00:37:04 schreef Electroboy:
Hallo mensen ik zit nu een beetje te kloten met microcontrollers. Ik heb nu dus de Attiny 13 deze heeft 6 i/o poorten. Daar zocht ik dus een toepassing voor, nouja het is dus een timer voor een belichtingsbak geworden.

Bravo Electroboy: je had de oplossing en je hebt ook nog eens het probleem ervoor gevonden!! Ga door met kloten zou ik zo zeggen!! (:))

@Atlantis:
Dat heet inventiviteit en je gedachten delen met anderen.
Erg leerzaam.

@Electroboy:
Keep it up!

Weet niemand hoe dit komt ?

http://members.home.nl/mrhofman/Probleem1.avi

Ik stuur alleen maar de waarde $09 en $19 naar buiten(PORTB). ik snap niet waar de waarde $08 vandaan komt.

Je krijgt ook nog een ander probleem ...

Welke uitgang ga je gebruiken om je lamp aan te hangen ?

Op 17 juli 2005 20:43:55 schreef Sine:
Je krijgt ook nog een ander probleem ...

Welke uitgang ga je gebruiken om je lamp aan te hangen ?

ja dat is hier idd een probleem. ik zou deze eerst af willen maken (zonder aansturing van het lampje) en als dit me lukt, ga ik de display's serieel aansturen.

*kick*


.include "tn13def.inc"

.def temp = r16
.def seg1 = r17
.def seg2 = r18


.org $00

ldi temp,$3f
out ddrb,temp	; PORTB als output.
ldi	seg1,$01
ldi	seg2,$02

start:

out     portb,seg1
nop
nop
out	portb,seg2
nop
nop
rjmp start

ben ff helemaal vanaf het begin begonnen.
hier verwacht ik dus dat Portb de waarde 1 of 2 weergeeft en deze ook aan blijft geven, PB0 en PB1 doen niet wat ik wil.
Bij de overige poorten doet hij het perfect, wat is hier aan de hand?