Shiftligt till MC

Berätta om dina pågående projekt.
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Inlägg av Nisse »

Självklart får du låna koden. Den är såpass simpel att det inte är något att skydda.

Skippa reläet i din lösning dock. Använd en transistor och jorda minussidan när du vill klippa tändningen istället. (men det talar vi mer om i ämnet jag såg att du skapat om din varvtalsregulator)

Mvh
Dwarf
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Inlägg av Nisse »

Jag blir knäpp...

Är det någon som har lust, tid och ork att förbarma sig över min kod? Jag behöver ett par (eller fler) extra ögon för att se om jag gjort någon tankevurpa eller annan miss.

Grejen är att som koden nedan är skriven nu så skall lysdioden (se schema tidigare i tråden) tändas om Extern interupt triggas ca 244 gånger per sekund. OK, fine! Kruxet är att jag lyckas tända dioden och hålla den tänd genom att peta frenetiskt på interuptpinnen med en liten kabel ansluten till VCC :shock: Är det kontaktstuds? Jag tror mig nämligen inte vara snabb nog att klara 244 Hz :oops:

Så snälla någon, ta en titt och se vad som är galet, om något?

Det handlar om en aTiny15 som går på intern oscillator 1,6 MHz.

[edit]Schemat i tidigare inlägg syns strax igen. Servern bilderna ligger på hade roat sig med att gå ned i batterisparläge när jag råkat dra ur sladden till den. [/edit]

Kod: Markera allt

// Shiftlight XT660R

.include "tn15def.inc" 

.def Counter = r17	;Räknaren i register 17
.def Temp = r16		;Register 16 används till lite av varje

//-- Testar med 8052 RPM kommer senare ändras till ca 7000 RPM 
.equ Varv = 40		;40 ger 40*6,1 = 244 Hz
 
.org 0x0000 
rjmp Reset

//--- Interrupt Vector ------------------------------------------------- 

.org INT0addr
rjmp ExtInt			;Extern Interupt INT0

.org OVF1addr
rjmp TimerInt		;Intern Interupt Timer 1 overflow

Reset: 

//--- Init -------------------------------------------------------------- 

	ldi    	Counter,	0x00		; Nollställ räknaren
   	ldi 	Temp,		0b00111011	; Sätt PB2/INT0 som ingåmg och övriga som utgångar
   	out		DDRB,		Temp
   	sbi		PORTB,		PORTB3		; Sätt PB3 till 1 
   	ldi    	Temp,		0b00000011  ; Sätt att trigga på Stigande flank
   	out    	MCUCR,		Temp
   	ldi    	Temp,		0b01000000  ; Aktiverar extern interupt INT0
   	out    	GIMSK,		Temp

//-- Sätter timer och overflow till att ge interupt ca 6,1 gånger/sec vid CK 1,6 MHz
//-- 1600000/1024/256 ~ 6,1
   
   	ldi 	Temp, 		0b00001111	; Sätt Timer1 prescaler till CK/1024
   	out 	TCCR1, 		Temp
	ldi		Temp,		0b00000100
	out 	TIMSK,		Temp		; Aktivera interupt på timer1 overflow
	sei


Loop:
	rjmp 	Loop

//-- Extern interupt PB2 -----------------------

ExtInt:
	inc 	Counter					; Öka räknaren
	reti

//-- Intern Timer Interupt ---------------------------


TimerInt:
	ldi 	Temp, 		Varv
	cp 		Counter, 	Temp
	brsh 	Light					; Om räknaren över hoppa
	cbi 	PORTB, 		PORTB3 		; Släck lysdiod
	ldi 	Counter, 	0 			; Nollställ räknare
	reti

Light:
	sbi 	PORTB, 		PORTB3		; Tänd lysdiod
	ldi 	Counter, 	0 			; Nollställ räknare
	reti
Tack på förhand
Nisse
bearing
Inlägg: 11672
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Har inte kolla koden, men jag är säker på att det studsar. Det studsar alltid mycket.

Mitt tips är att du fixar en annan krets som genererar pulser med variande avstånd för att testa ditt program. T.ex. en annan AVR/PIC eller en 555 eller kanske rentav samma krets - borde ju funka.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Hmm.. minns inte hur PORTB ser ut som default, men för säkerhets skull, sätt PB2/INT0 i PORTB hög för att aktivera pullup-motståndet.
Kolla om det blir någon skillnad. Om inte:
Räkna fram ett RC-nät som spärrar höga frekvenser (kontaktstudsar). R kopplar du mellan ingången och VCC (den interna pullupen kan funka), C kopplar du mellan ingången och GND. Ofrivilliga kontaktstudsar borde försvinna då.
Skriv svar