Zaslal: ne říjen 14 2018, 20:21 Předmět: Pomoc s úpravou programu pro attiny 13
Ahoj potřeboval bych trochu pomoc s vytvořením programu pro attiny 13 která bude řídit svářečku.
Funkce je jednoduchá 2 vstupy 3 výstupy
1 vstup je od tlačítka pro externí posuv drátu
2 vstup je od hořáku
Funkce sváření mi funguje jak má.
Při logické 1 od hořáku se sepne výstup pro plyn a udělá 1,5s předfuk plynu, dál se aktivuje výstup pro podavač a stykač trafa. Při logické 0 naběhne jakoby fáze ukončení svařování. Výstup pro podavač se vypne hned, 0,6s na to odpadne signál pro stykač trafa a 1,9s na to odpadne výstup pro plyn (dofuk plynu) To je vše ok. Jediné co tak mi připadá že při změně 0/1 chvilku přemýšlí co bude dělat. Sepnu vstup a 0,5-1s se nic neděje a pak už začne jak má ve správných časech, zrovna tak když vypnu svařování, tak cca 0,5-1s jak když čeká a pak začne už správně v časech ta fáze ukončení svařování. To ě trošku trápí.
Co ale nevím jak udělat je externí posuv. Vstup je jiný, ale výstup stejný. Tak jak mám teď napsaný program tak mi nefunguje ten výstup pb4 pro podavač. Když odstraním jakoby tlačítko ext posuvu, tak to funguje jak má. když ho tam dopíšu tak nejde ani jako externí posuv ani ve svářecí sekvenci.
Nevím zda jsem to napsal alespoň trochu srozumitelně, každopádně v programu to je vše vidět a s popisky. Dokázal by mi někdo pomoci, jen třeba napsat udělej tak, či onak, nebo že by přímo upravil program cokoli...
přikládám ve v balíku, je tam udělané pdf toho programu, tak komplet složka z atmel studia kde je vše.
Tak jak to máš napsané, se ti program pořád točí v té while smyčce a stále dokola se ti spouští nebo ukončuje svařování, podle toho, jestli je tlačítko sepnuté nebo rozepnuté a stále se čeká tu 1,5s, tu 1,9s. Tak to asi fungovat nemá, ne?
Funkce má být. Pokud je vstup od hořáku v logická 0 nic se neděje. Pokud přepne do 1 tak naběhne fáze svařování. Tj. aktivuje výstup pro plyn, čeká 1,5s a zapne k tomu výstup pro podavač a stykač trafa dále je vše zaplé dokud nepřijde na vstup 0, když přijde ta výstup pro podavač vypne okamžitě pak po O,6s vypne výstup stykače trafa a od toho po 1,9s vypne výstup plynu.
Druhá funkce je jen při například zavádění nového drátu. Takže tlačítko které jde na vstup pošle signál 1 a sepne se výstup pro podavač (stejný jako v sekvenci svařování, při logické 0 ten výstup vypne.
Mě funguje svařovací sekvence pokud do toho nenapíšu podmínku s tlačítkem. Jen mi přijde že při změně stav 0/1 chvilku spí než začne provádět ty operace, jinak sled operací a časů je ok, ale pokud dopíši to tlačítko posuvu, tak mi v svařovací sekvenci neaktivuje výstup pb4 pro ten posuv a neaktivuje mi ho ani když sepnu tlačítko posuvu. Je mi jasné že se tam totiž budou ovlivňovat ty 2logiky vstupu na stejný výstup, ale nevím jak to napsat aby to šlo, nikdy jsem si vlastní program nepsal.
Založen: Nov 20, 2012 Příspěvky: 1453 Bydliště: Praha
Zaslal: po říjen 15 2018, 10:38 Předmět:
Musíš si v programu pamatovat v jakém stavu se právě nacházíš. Resp. jestli jsou obě funkce na sobě nezávislé, tak si musíš pamatovat stavy dva. A podle toho udělat stavový automat. Tím zároveň můžeš ošetřit i "debouncing" tlačítek.
vypadá to, že rovnou konkrétně programuješ a zabýváš se těmi vstupy a výstupy, neudělal si předem vývojový diagram, ze kterého by ti asi v některé chvíli bylo zřejmé, že tam potřebuješ nějaké pomocné proměnné, do kterých se bude ukládat snímání tlačítek a stav výstupů.
DDRB &= ~ (1<<PB0); // pb0 vstup tlačítko posuv pwm
DDRB &= ~ (1<<PB1); //pb1 vstup spínač hořák
DDRB |= (1<<PB2); // pb2 výstup plyn
DDRB |= (1<<PB3); //pb3 výstup stykač trafo
DDRB |= (1<<PB4); //pb4 výstup pwm podavač
vari_se = 0; // nevari se
while (1)
{
if ((PINB & (1<<PB1)) && !vari_se) // sepnuto tl. a nevari se
{
_delay_ms(20);
if (PINB & (1<<PB1)) // nebyl to zakmit
{
PORTB |= (1<<PB2); // sepnutí výstup pb2 plyn
_delay_ms(1500); // čekání 1,5s
PORTB |= (1<<PB3); // sepnutí pb3 stykač trafo
PORTB |= (1<<PB4); // sepnutí pb4 pwm podavač
vari_se = 1; // vari se
}
}
if (!(PINB & (1<<PB1)) && vari_se) // rozepnuto tl. a vari se
{
_delay_ms(20);
if (!(PINB & (1<<PB1))) // nebyl to zakmit
{
PORTB &= ~ (1<<PB4); // vypnutí pb4 pwm podavač
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.