Diskuze: arduino PWM

Hardware PC Elektrotechnika arduino PWM

Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Ahoj, dneska
jsem vytvořil a naprogramoval na Arduinu program, který má pomocí PWM pomalu rozsvěcovat a zhasínat led diody (nápis) – viz. obr. http://imgur.com/9CXlhpm – NÁPIS LOVE... Jenže na arduinu mi to fungovalo, a jakmile vyndám ATmegu a dám jim na desku, tak mi to nejede. . Spíš bych se chtěl zeptat, jestli nevidíte nějakou chybu v zapojení schéma procesoru. http://imgur.com/a/jbDjY – schéma.. Jsem nováček, a tak se chci zeptat, protože já jsem již marný. Jinak ve schéma chybí připojený krystal(16MHz) a 2 kondíky za krystalem (27pF), které jsem tam dneska dodal, a chci říct, že mám blbý pocit, že jsem atmegu328p-pu odpálil, ale právě netuším jak... Ono to jelo, ale jako sekaně, a pak po chvilce už to nejelo vůbec... A právě jsem si četl tvůj článek, a mám takový pocit, že jsem do toho processoru měl něco nahrát, než jsem ho natvrdo připojil na kuprexit . Díky moc předem. Kdyby jste někdo měl nějaký návrh tak napiš prosím možné řešení. Zde je i kód:

int LED1 = 5; // LED 1 na 5 pin
int LED2 = 6; // LED 2 na 6 pin
int LED3 = 10; // LED 3 na 10 pin
int LED4 = 11; // LED 4 na 11 pin
void setup() {
}
void loop() {
//————————————————————LED 1—————————————————————-
// fade z min do max v kouskách po (x) bodech:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 1000){
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED1, fadeValue);
// čeká (x) mili sekund nž se setmí
delay(0.00001);
}
// fade z max do min v kouskách po (x) bodech:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 1) {
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED1, fadeValue);
// čeká (x) mili sekund než se setmí
delay(4);
//————————————————————LED 2—————————————————————-
}
for (int fadeValue2 = 0 ; fadeValue2 <= 255; fadeValue2 += 1000){
analogWrite(LED2,fadeValue2);
delay(0.00001);
}
// fade z min do max v kouskách po (x) bodech:
for (int fadeValue2 = 255 ; fadeValue2 >= 0; fadeValue2 -= 1) {
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED2, fadeValue2);
// čeká (x) mili sekund než se setmí
delay(4);
}
//————————————————————LED 3—————————————————————-
for (int fadeValue3 = 0 ; fadeValue3 <= 255; fadeValue3 +=1000){
analogWrite(LED3,fadeValue3);
delay(0.00001);
}
// fade z max do min v kouskách po (x) bodech:
for (int fadeValue3 = 255 ; fadeValue3 >= 0; fadeValue3 -= 1) {
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED3, fadeValue3);
// čeká (x) mili sekund než se setmí
delay(4);
}
//————————————————————LED 4—————————————————————-
for (int fadeValue4 = 0 ; fadeValue4 <= 255; fadeValue4 += 1000){
analogWrite(LED4,fadeValue4);
delay(0.00001);
}
// fade z max do min v kouskách po (x) bodech:
for (int fadeValue4 = 255 ; fadeValue4 >= 0; fadeValue4 -= 1) {
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED4, fadeValue4);
// čeká (x) mili sekund než se setmí
delay(4);
}
//————————————————————LED 1—————————————————————-
// fade z min do max v kouskách po (x) bodech:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5){
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED1, fadeValue);
// čeká (x) mili sekund nž se setmí
delay(20);
}
// fade z max do min v kouskách po (x) bodech:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 300) {
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED1, fadeValue);
// čeká (x) mili sekund než se setmí
delay(20);
}
//————————————————————LED 2—————————————————————-
for (int fadeValue2 = 0 ; fadeValue2 <= 255; fadeValue2 += 5){
analogWrite(LED2,fadeValue2);
delay(20);
}
// fade z max do min v kouskách po (x) bodech:
for (int fadeValue2 = 255 ; fadeValue2 >= 0; fadeValue2 -= 300) {
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED2, fadeValue2);
// čeká (x) mili sekund než se setmí
delay(20);
}
//————————————————————LED 3—————————————————————-
for (int fadeValue3 = 0 ; fadeValue3 <= 255; fadeValue3 += 5){
analogWrite(LED3,fadeValue3);
delay(20);
}
// fade z max do min v kouskách po (x) bodech:
for (int fadeValue3 = 255 ; fadeValue3 >= 0; fadeValue3 -= 300){
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED3, fadeValue3);
// čeká (x) mili sekund než se setmí
delay(20);
}
//————————————————————LED 4—————————————————————-
for (int fadeValue4 = 0 ; fadeValue4 <= 255; fadeValue4 += 5){
analogWrite(LED4,fadeValue4);
delay(20);
}
// fade z max do min v kouskách po (x) bodech:
for (int fadeValue4 = 255 ; fadeValue4 >= 0; fadeValue4 -= 300) {
// nastavuje hodnout (vzdálnost od 0 do 255):
analogWrite(LED4, fadeValue4);
// čeká (x) mili sekund než se setmí
delay(20);
}
}
 
Odpovědět 18. února 19:23
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:

Po vrácení zpátky atmegy zpátky do Arduina to jede?
Ale nejdřív bych zkusil změřit, kolik vůbec bere to množství LEDek, jestli to je víc než 20mA, tak si moh odpálit vývody.

Nahoru Odpovědět 18. února 20:11
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Právěže nejede, a každá z těch větví má víc jak 100mA...

 
Nahoru Odpovědět 18. února 20:25
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Matěj Kutal
Adam Ježek:

A Arduino má limit na pin 20mA, ve chvilkové špičce 40mA...

Nahoru Odpovědět 18. února 20:36
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Jo já vím, ale mě se to odpálilo až byla samotná atmega na desce... A chtěl jsem se právě zeptat, čím to může být, abych neodpálil další...

 
Nahoru Odpovědět 18. února 20:43
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Matěj Kutal
Adam Ježek:

Deska nemá žádnou ochranu pro čip, tudíž asi jen náhoda, že po vyjmutí.
A pro příště by mohlo pomoct nespínat čipem napřímo takovýhle proudy.

Nahoru Odpovědět 18. února 20:59
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Ok, tak já tam hodím relé.. A chtěl jsem se ještě zeptat, jestli se na čip nahrává nějaký program, když se dává ven z arduina. A nebo jestli se dává pouze s kódem. Slyšívám semtam něco o nějakém booloaderu, a nevím o co se jedná. A popřípadě, když si koupím atmegu, tak stačí pouze v arduino aplikaci vypálit zavaděč, aby fungovala, a nebo to není jen tak jednoduché, a dělá se okolo toho víc věcí?

 
Nahoru Odpovědět 18. února 21:20
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Matěj Kutal
Adam Ježek:

Relé neumí PWM, tady je lepší tranzistor: http://www.itnetwork.cz/…velke-zateze
Co se týče druhé části tvé otázky, trochu si nejsem jistej co se tim pokoušíš říct.
Každopádně na čipu je bootloader (dalo by se říct i zavaděč). Ten se do čipu nahraje a po restartu čipu se vždy spustí ten. Jeho úkolem je naslouchat na sériovém portu, jestli se nepokoušíš nahrát nový sketch. Pokud ano, tak začne ukládat do paměti data přijímaná ze sériového portu (zkompilovaný sketch) a ten si poté uloží a vykonává ho. Pokud se mu nic neposílá, spustí uložený sketch. Pak zase až do restartu je bootloader neaktivní (můžeš si ho představit jako BIOS). Komunikace je dost ošetřená, tudíž se nemusíš bát, že by se ti při posílání dat na port povedlo náhodou zahájit nahrávání sketche.

Program, kód, sketch, to je jedno a to samé a na čip nemá žádný vliv, jestli je v desce nebo ne.

Nahoru Odpovědět 18. února 21:30
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

No tranzistor sem tam měl, tudíž nechápu, jak se to mohlo stát. Když jsem se ptal kdesi jinde na fóru, tak mi říkali, že se to mohlo nějak přetaktovat krystalem, nebo tak něco, ale krystal byl 16Mhz. Tu druhou otázkou jsem myslel spíš to, že když si koupím normální novou atmegu, tak mi v arduinu fungovat nebude, ne?

 
Nahoru Odpovědět 18. února 21:38
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Matěj Kutal
Adam Ježek:

Pokud v ní bude nahranej Arduino bootloader, tak bude.
Ale není problém ho tam nahrát, jenom potřebuješ ISP nebo funkční Arduino.

Nahoru Odpovědět 18. února 21:43
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Ok, dík moc :) Takže na závěr, myslíš teda, že se to odpálilo náhodou? A nebo za tím něco stojí?

 
Nahoru Odpovědět 18. února 21:56
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Matěj Kutal
Adam Ježek:

No nevim.
Teď koukam ještě na to schéma, těch 100mA co si naměřil máš jenom na LEDkách, nebo na tranzistoru? Taky je důležitý, jestli jsi tam použil tranzistor s přiměřenými parametry a jaký má spínací proud.

Nahoru Odpovědět 18. února 22:01
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

No na Tranzistoru jsem to nezměřil, protože dřív mi odešel čip. A dívej, nejvíc bere to samostatné "véčko" z ledek, a to bere 90mA a zbytek a něco míň. Má to fungovat tak, že se pomalu zapínají všechny písmena a pak svítí všechn na jednou, a jestli třeba to nemohlo odpálit ten čip. Protože jak jsem ji říkal, tak ono to jakoby jelo, ale sekalo se to. Jako když dáš rozjet hru na starý počítač... TR je BC547

 
Nahoru Odpovědět 18. února 22:13
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Matěj Kutal
Adam Ježek:

Změřit proud můžeš i bez čipu, prostě vezmi multimeter, přepni na ampéry, jeden kontakt dej na +, druhej na pin v patici, na kterej je připojenej tranzistor.
Ale co sem koukal do datasheetu, tak tranzistor by neměl mít dostatečně velký spínací proud na odpálení Arduina (leda že by se ti povedlo někde dát blbě odpor, já ho jednou vynechal a teklo mi tam 2A, čip samozřejmě hned v háji :D ).
To sekání je divné, máš připojený správně krystal a přes kondíky na zem?
Když zkusíš čip vrátit do Arduina a nahrát do něj třeba Blink, funguje to?

Nahoru Odpovědět 18. února 22:24
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Hej místo jednoho odporu který měl být 100 ohmů jsem dal omylem 27k, to je před tu jednu ledku, a pak jsem k němu jen přiložil paralelně 2 odpory 1k, a pak už to teda nejelo no:D Možná se ten odpor natolik snížil, že se to odpálilo Ale nevím, zda to na to mělo takový účinek :D No jinak jsem to celé přoměřil, a krystal i kondy jsou zapojené dobře... Teda pokud krystal nemá polaritu, což teda nevím.

 
Nahoru Odpovědět 18. února 22:30
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Jinak když to měřím jak jsi napsal, tak mi jedno to písmeno nesvítí... (to poslední "E")

 
Nahoru Odpovědět 18. února 23:16
Avatar
LittleHill
Člen
Avatar
Odpovídá na Matěj Kutal
LittleHill:

Ahoj,
zasadni vec k tomu zapojeni,

  1. doporucuju na napajeni ke stabilizatoru pridat filtracni kondenzatory 100nF na vstup i vystup. (Jak moc ten stabilizator hreje? - mozna ti to kmita) Plus nejaky keramicky 2,2uF nebo elektrolyt 10uF na vstup a 47 az 100uF elit na vystup.

Z jakeho napeti to zivis, 5v nebo 3v3?

  1. Na reset pin dej mensi kondenzator. AtMegy sice nejakou hysterezi maji ale zapinat ji rc clenem s 0,25s zpozdenim neni uplne dobre. Na miste C1 100nF bude bohate stacit.
  2. Vystupni proud ktery tahas z pinu uC je urceny resistory R1,2,3,4, ( <napeti uC> - 0,7V / hodnota resistoru ), ten vynasob circa 110 az 190ti (hfe tveho tranzistoru) abys dostal proud ktery povolis ledkam.
  3. Spinat ledky bez omezeni proudu (primo z napajeciho napeti) take neni uplne spravne. Samozrejme fungovat to chvili bude, otazkou je jak dlouho, vse pak zalezi na tom jaky ubytek maji ty diodya to urcuje maximalni proud. V tvem pripade pri pouziti R1..R4 vetsi nez 2k7 ti bude zustavat zbytkovy vykon na tom tranzistoru. Opet zalezi jake mas ledky a jake napajeci napeti. Je mozne ze odesel ten tranzistor. Lepsi reseni by podle me bylo zapojit jich vice seriove s nejakym resitorem a zivit to ze zdroje jeste pred tim stabilizatorem. a) se tim vyhnes zatezovani stabilizatoru b) pokud tam nepouzivas vice jak cca 30V, muzes pouzit i aktualni tranzistory.

Klidne napis PM, poradim jak upravit.

Editováno 23. února 17:32
 
Nahoru Odpovědět 23. února 17:32
Avatar
Matěj Kutal
Člen
Avatar
Matěj Kutal:

Dívej jede to na 12V, a při zapnutí pouze jednoho písmena ten stabilizátor hřeje jako prase, a to i s chladičem.Hlavně mi jde o to, že tak malé cesty, se mi už nikdy nepodaří vyleptat, kdybych to dělal celé znovu... takže nevím, jestli bych na tom dělal nějaké zásadní změny... Samozřejmě nějaký ten keramický kondík tam přivrtat můžu, to není problém... No jako dívej, ty ledky berou asi 120mA vždycky celá větev... Ale je mi jasné, že když ten tranzistor není při PWM v pulzním režimu, tak mi to neutáhne... Já už jsem bezradný... :D Spálil jsem si megu, a ještě k tomu 2 tranzistory:D

 
Nahoru Odpovědět 23. února 20:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.