trippling - komfortne blikanie (trojblik) - atmega8

Ahoj, rozhodol som sa upraviť známu schému tripplingu

skodaoctavia.cz/sites/default/files/Obrazky/clanky/Navody/trippling_clip_image002_0001_jpg_79291.jpg

, ktorou si chcem upgrejdnuť moje vozidlo.

nepáči sa mi použitý pic, chcem ho nahradiť avr-kom atmega8.

program bude fungovať takto -
1.
pri zopnutí vstupu1 po dobu kratšiu ako 300 ms (napr.) zapni výstup1 na dobu 1500 ms (napr.)

pri zopnutí vstupu2 po dobu kratšiu ako 300 ms (napr.) zapni výstup2 na dobu 1500 ms (napr.)

pri zopnutí vstupu2, ak je zapnutý výstup1, vypni výstup1

pri zopnutí vstupu1, ak je zapnutý výstup2, vypni výstup2

potrebujem nakopnúť - ako mám merať čas zopnutého vstupu, ako mám zapnúť výstup na určitý čas,
použijem časovače a prerušenia, len v tom - ako, mám momentálne guláš:D

:arrow_right: administrator: příspěvek byl upraven
Odkaz byl vyjmut z code.

:arrow_right: administrator: přiloženy externí soubory

Ahoj prave pracujem na tripplingu do auta. Vlastne uz ho mam aj v aute s pojazdneny len prerabam program aby som vychytal muchy :slight_smile:. Jedna sa o atmegu 8.

Co sa tyka merania impulzu sprav to cez prerusenie. Urcis si cas na jedno prerusenie napr 10ms a dookola testujes vstup. Das podmienku napr. ak je vstup aktivny tak pocitas prerusenia a s toho vyhodnotis co dalej. A to iste aj s vystupom pocitas tie iste prerusenia a podla toho si nacasujes vystup.

Nenapisal si do akeho auta to ides davat ja som to daval do felicie a natrafil som na par problemov. Ak som zapol smerovku tak niekedy pri vypinani mi packa tukla do opacnej strany a tym zapla tripling do opacnej strany. Preto odporucam snimat impulz na tripling napr od 50ms do 300ms.

Dalsi problem s ktorym si neviem rady. Ak dam impulz zapne tripling vsetko ok. Ale ak zapnem trvalo smerovky tak mi na vstup idu impulzy zo smeroviek(totiz som pripojeny paralelne na elektroinstalaciu auta). a rele triplingu mi dookola cvaka sice pri zapnutej smerovke to nevadi ale zbytocne spina rozpina.

Takze potrebujem rozpoznat ci na vstup prisiel jeden impulz alebo viac impulzov za sebou. Ak jeden impulz ktory splna podmienky napr 50-300ms tak zapni vystup. Ale ak pride viac impulzov tak aby bol vystup neaktivny aj ked splnaju podmienku. Ako na to?

Cau
a neni nahodou jednodussi najit v aute to co spina ty smerovky a nahradit to tim trojblikem ? nez to davat paralerne, nebo do serie, nebo behem sepnuti vystupu testovat jestly je vstup stale seplej nebo ne, pokud ano vypnout vystup a zapnout ho az po vypnuti a opetovnem zapnuti vstupu

Nechcel som robit ziadny zasah do elektroinstalacie preto som to takto riesil. Proste som pripojeny len tromi dratmi na packu prerusovaca bez akehokolvek strihania kablov alebo tahania novych kablov a samozrejme napajanie. Zhodil som len spodny kryt po volantom tam som sa napojil na existujuce kable. Takto pri prerabke by som musel zrejme rozoberat pristrojovku (kvoli vystraznemu…) atd.

Najidealnejsie riesenie by bolo nahradit elektronicky (mechanicky) prerusovac nejakym modulom z atmegou. Proste vytiahnes zo svoriek prerusovac a zasunies modul s atmegou a bolo by to univerzalne…

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

netusim jak je zapojeny vystrazny ale nejde to nahodou spolecne s packama na ten prerusovac ? staci ho najit kouknout jak je to zapojeny a pak ho muzes popripade nahradit

Prerusovac je v poistkovej skrini. Mal som ho vytiahnuty a rozobraty je tam pouzity obvod MC33193.
Prerusovac v aute je zapojeny troma vodicmi plus, kostra a vystup. Pokial som dobre pochopil tak ten vystup je zaroven aj ako vstup ktory snima ci je pripojena zataz (ziarovky). Ak su pripojene tak zacne prerusovat ten vystup.

Ak sa mylim opravte ma.

Povodne som to chcel ten prerusovac nahradit atmegou ale tiez to nie je jednoduche s toho dovodu ze aj keby som ho nahradil tak tripling nebude fungovat kedze packa v nulovej polohe je odpojena od smeroviek. Zas by sa musela prerabat elektroinstalacia…Teraz hovorim o felicii mozno v inych autach je to inak zapojene.

Mne uz staci v atmege vyriesit to sledovanie impulzov co som spominal v predchadzajucom prispevku a mam to v suchu.

Ked som robil prvy program robil som to pomocou preruseni INT0 a INT1 a v preruseni som daval 300mS delay fungovat to fungovalo ale program bol neefektivny sice to slo korektne ale ani sam neviem ako :smiley: tak som program prepisal tak ze timer mi kontroluje vstupy dookola cez prerusenie, ale vtedy sa mi vyskytol ten problem s tymi impulzmi. Prepisal som ho preto aby bola atmega vyuzita chcem tam este dorobit automaticke svietenie, voltmeter mozno teplomer

Nieco podobne som robil aj ja a konkretne islo o alarm do auta kde otrasove cidlo malo dva stavy ktore boli odlisovane prave dlzkou impulzu. Pri slabsom otrase bola log1 dlha 600ms a pri silnejsom tusim 1200ms. Kedze okrem toho alarmu tam nic ine nebolo tak som sledoval stav vstupneho pinu a pokial na nom bola log1 tak som spustil casovac nastaveny na 100ms a po kazdom cykle som inkrementoval premennu. Ak bola vysledna hodnota 6 tak som ho vyhodnotil ako slaby otras a ak 12 tak islo o silny otras a na zaklade vyslednej hodnoty som dalej riadil ostatne veci

Naco to vyrabat ked to uz je hotove na PIC a funguje to, po druhe existuje zdrojak od picu tak ze skopirovat a prepisat do Megy… Len k tomu treba vedomosti.

Niekedy je lepsie ked si clovek sam spravi program. Nieco sa tym nauci a potom je s toho vacsia radost a vacsia motivacia k zlozitejsim veciam :slight_smile:

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

pojde to do golfa trojky,
budem tu davat info, ako napredujem
zatiaľ čús a dík

jsi si jisty, ze v golfu trojce tohle nejde aktivovat v komfortce pres diagnosticke rozhrani? ja bych totiz tipoval ze ano.

Takze po 2 tyzdnovom uspesnom testovani triplingu bez nejakych anomalii a divneho spravania posuvam kod ktory som pouzil v atmege. Dufam ze pomoze, inspiruje pri pisani kodu na tripling. Schemu som pouzil tu istu ako je v prvom pripevku len s tym rozdielom ze som nepouzil odporove delice a zenerky ale optočleny.

#include <avr/io.h>
#include <avr/interrupt.h> 

#define TRUE 0xFF
#define FALSE 0

#define SET(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define RESET(ADDRESS,BIT) (ADDRESS &=~(1<<BIT))
#define TST(ADDRESS,BIT) ((ADDRESS) & (1<<(BIT)))

#define lava_smerovka_on SET(PORTD,PD0)
#define lava_smerovka_off RESET(PORTD,PD0)
#define prava_smerovka_on SET(PORTD,PD1)
#define prava_smerovka_off RESET(PORTD,PD1)

volatile unsigned int lava, prava,lava_zap,prava_zap,lava_vyp,prava_vyp;



ISR(TIMER0_OVF_vect){

	//ak je zapnuta lava smerovka
	if(TST(PIND,PD2)==0){ lava++; //pocitaj dlzku impulzu
						  lava_vyp = FALSE; //vynuluj pocitadlo dlzky vypnutia smerovky
						  				}	
		//ak je vyp. lava smerovka a pocitadlo dlzky vypnutia smerovky nie je 400
		else if(TST(PIND,PD2) && lava_vyp!=400) lava_vyp++; 

	//ak je zapnuta lava smerovka pocitaj dlzku zopnutia	
	if(TST(PIND,PD0))lava_zap++; 
						
		//ak je zapnuta prava smerovka
		if(TST(PIND,PD3)==0){ prava++; //pocitaj dlzku impulzu
							  prava_vyp = FALSE; //vynuluj pocitadlo dlzky vypnutia smerovky
							  					}
		//ak je vyp. lava smerovka a pocitadlo dlzky vypnutia smerovky nie je 400
		else if(TST(PIND,PD3) && prava_vyp!=400) prava_vyp++;

	//ak je zapnuta prava smerovka pocitaj dlzku zopnutia	
	if(TST(PIND,PD1))  prava_zap++;	

					}

	int main(){

	DDRB|=(1<<PB1);

 	DDRD = 0xF3; //vstup PD2,PD3 ostatne vystup

 	PORTD|=(1<<PD2)|(1<<PD3);	//pull-up na PD2,PD3

 	TCCR0|=(1<<CS01)|(1<<CS00); //predelicka 64 pri 8MHz

	TIMSK|=(1<<TOIE0); //povolenie prerusenia T0 

 	sei();

	while(1){	

		//ak je lava smerovka vypnuta dlhsie ako 400 preruseni (800mS)
	if(lava_vyp==400) lava = FALSE; //vynuluj pocitadlo dlzky impulzu
							
						
		//tripling lava strana						 			
	if(lava>30 && lava<145){ 	//ak je impulz v tomto rozmedzi
		if(TST(PIND,PD2) && TST(PIND,PD3)){//ak su smerovky vypnute
			 		 lava_smerovka_on;	//zapni lavu smerovku
			 		 lava = FALSE;	//vynuluje pocitadlo dlzky impulzu
			 		 prava_zap = 1000; //vypni opacnu smerovku (v pripade ak bola zapnuta) 
					 		 	} 
			  				}
							

	//ak counter narata 1000 cca 2s vypne lavu smerovku a vynuluje pocitadla
	if( lava_zap==1000){	lava_smerovka_off; //vypni lavu smerovku	
							lava=FALSE;			//vynuluj pocitadlo dlzky impulzu
							lava_zap=FALSE;		//vynuluj pocitadlo dlzky zapnutia triplingu
											}

	//ak je prava smerovka vypnuta dlhsie ako 400 preruseni(800mS)
	if(prava_vyp==400) prava = FALSE;
								
					

		
	//tripling prava strana
	if(prava>30 && prava<145){ //ak je impulz v tomto rozmedzi
		if(TST(PIND,PD3) && TST(PIND,PD2)){//ak su vypnute smerovky
			  prava_smerovka_on; //zapni smerovku
			  prava = FALSE; //vynuluje pocitadlo
			  lava_zap=1000;  }	//vypni opacnu smerovku (v pripade ak bola zapnuta) 
			  				}	


	//ak counter narata 1000 cca 2s vypne pravu smerovku a vynuluje pocitadla 
	if(prava_zap==1000){	prava_smerovka_off;	 //vypni pravu smerovku
							prava= FALSE;		//vynuluj pocitadlo dlzky impulzu
							prava_zap=FALSE; //vynuluj pocitadlo dlzky zapnutia triplingu
												}
 					
				
	}
 }

Narazil jsem na kompletní řešení triplingu s PIC.

nieje tam zdrojak… ale na inej stranke tusim je.