Pomoc s úpravou programu pro attiny 13

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
reher64
Příspěvky: 24
Registrován: 09 črc 2013, 00:00

Pomoc s úpravou programu pro attiny 13

#1 Příspěvek od reher64 »

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.
Přílohy
zení 2.rar
(39.71 KiB) Staženo 288 x
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#2 Příspěvek od lesana87 »

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?
Uživatelský avatar
reher64
Příspěvky: 24
Registrován: 09 črc 2013, 00:00

#3 Příspěvek od reher64 »

Ne ne, tak určitě 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.
Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 00:00
Bydliště: Praha

#4 Příspěvek od FHonza »

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.
Uživatelský avatar
reher64
Příspěvky: 24
Registrován: 09 črc 2013, 00:00

#5 Příspěvek od reher64 »

Chápu co tím asi chcete říct, bohužel do programu absolutně netuším jak to převést.
Uživatelský avatar
Crifodo
Příspěvky: 14779
Registrován: 11 říj 2005, 00:00

#6 Příspěvek od Crifodo »

vypadá to, že rovnou konkrétně programuješ a zabýváš se těmi vstupy a výstupy, neudělal si předem [url=https://cs.wikipedia.org/wiki/Vývojový_diagram]vývojový diagram[/url], 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ů.
Uživatelský avatar
lesana87
Příspěvky: 4395
Registrován: 20 zář 2014, 00:00

#7 Příspěvek od lesana87 »

Třeba nějak takhle:

Kód: Vybrat vše

int main(void)
{
   char vari_se;

   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č
         
            _delay_ms(600);
            PORTB &= ~ (1<<PB3); // vypnutí pb3 stykač trafo
         
            _delay_ms(1900);
            PORTB &= ~ (1<<PB2); // vypnutí pb2 plyn
            vari_se = 0;         // nevari se
         }
      }
....
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“