Zdravim potřeboval bych poradit s prací přesněji s programováním v programu Keil.
Musím upravovat intenzitu pomocí dvou externích tlačítek a jedné externí červené led diody. Jedno tlačítko bude mít funkci zvyšovat intenzitu svícení až do maximálních hodnot. Druhé tlačítko bude mít funkci snižovat intenzitu svícení, až do zhasnutí diody.
mohl by mi někdo pomoci prosím?
Hardware který mam k dispozici:
-Mikroprocesor (STM32F100RB)
-2 externí tlačítka (na úpravu intenzity)
-1 externí dioda červená (na promítání PWM)
-USB kabel
Předem děkuji za pomoc :)
Nebude lepší, zkusit to tady? http://forum.fotonmag.cz/index.php?act=idx
A v čem je zádrhel? Na zmáčknutí jednoho tlačítka zvýšíš pwm a na zmáčknutí druhého snížíš.
Krátce: nevím, Keil jsem nikdy neviděl.
Off-topic:
1) Není takovýhle procesor kanón na vrabce?
2) pokud by u toho obvodu stálo za to uvažovat o účinnosti, není přímé blikání LEDkou přes PWM nejrozumnější způsob, jak regulovat intenzitu světla.
Smutnym faktem je, ze spousta 32bit Cortexu je v soucasnosti levnejsi nez leckera ATmega nebo dokonce ATtiny, prestoze je to opravdu kanon na vrabce. Nejakou dobu uz uvazuju, ze bych se mel Cortexy naucit pouzivat, protoze nabizi mnohem vic funkci nez AVR. ;-(
Rekl bych, ze v celem dotazu je hlavni problem zjistit, jak vubec zkompilovat a nahrat nejaky program do toho procesoru (coz neumim), zatimco vlastni program bude velmi jednoduchy, zvlast pokud neni receno, zda PWM ma byt SW nebo HW, jakou frekvenci, zda pouzivat preruseni, atd...
Jednoduchy nastrel, jak lze resit (pokud budeme mit funkce pro zjisteni, zda je zmacknute tlacitko a rozsviceni/zhasnuti led). Tohle diskuzni forum asi nezachova odsazeni, takze to moc prehledne nebude...
void main()
{
int period = 65535;
int val = 0;
while (1) {
if (tlacitko1() && val < period) ++val;
if (tlacitko2() && val > 0) --val;
for (int i = 0; i < period; ++i) {
if (i < val) ledOn(); else ledOff();
uDelay(1);
}
}
}
No a jsou to takhle zapouzdřené věci (system-on-chip včetně RAM a EEPROM) jako má Atmel AVR? Já se v tom teda nevyznám, ale pokud bych už měl ARMv7/v9, tak bych asi pak chtěl, aby na tom běžel Linux. Existují nějaké takové čipy, které by měly v uspaném stavu takovéto sub-mikroampérové odběry jako ten ATtiny, a které by nepotřebovaly kolem sebe spoustu další elektroniky (jako má třeba ten procesor v Raspberry Pi nebo v Beagleboardu)? A ještě aby to bylo pájitelné v amatérských podmínkách.
Ja se v znaceni Cortexu moc nevyznam, takze nevim co je presne tohle zac, ale predpokladam, ze je to +/- neco jako ATmega, akoratze mnohem vic pameti a vykonu. S tou eeprom tam tusim byva nejaka potiz, bud neni vubec nebo ji maji jen nektere (?), pze kolega, co to pouziva musel pouzit posledni stranku flash.
Na nekterych by asi i ten Linux mohl jit rozhybat, nicmene do jednocipu, co ma neco ridit, bych cpal jakykoliv OS az jako posledni moznost. Mam rad pocit, ze vim, co kdy presne procesor dela, jakmile do toho vstoupi nejaky planovac, uz se neda nicemu verit... :)
Co jsem tak pochytil z vypraveni, tak veci, ktere jsou na AVR nastavitelne jen pres fuses, jdou na cortexu menit za behu, takze muzes bezet z interniho oscilatoru a kdykoliv prejit na beh z krystalu. S tim jsem nedavno narazil, ze bych vetsinu casu potreboval bezet z 1 MHz oscilatoru kvuli spotrebe, ale pri pripojeni k USB prejit na 12 MHz krystal nebo 16 MHz PLL, jenze to zadne z vytipovanych AVR neumi (musel bych vzit neco s HW USB, coz zase narazelo v dalsich parametrech).
Jak je to presne se spotrebou, nevim. Mne se na ATmegach libi 5V napajeni (u tech novejsich uz 1.8V - 5.5V) a to, ze vetsina lze koupit v DIPu. To bych asi musel ozelet.
Na jednočipu co nemá MMU pravověrný linux nespustíš. (jedině komplet emulovaný ale to pak nemá cenu)
http://www.google.cz/url?sa=t&rct=j&q...
Tak ono dost záleží, co s tím procesorem chceš dělat. Pokud bych si třeba vymyslel že chci přehrávat MP3, zaznamenávat cestu do GPS, a číst micro SD karty, tak už to fakt vede spíš na Linux nebo nějaký menší embedded OS než na program běžící natvrdo na holém železe.
Teď nemluvím o světlech na kolo, ale když už jsem se pustil do studia té elektroniky, tak bych měl i pár projektů, u kterých by se hodilo výše uvedené (plus komunikace přes TCP/IP po ethernetu nebo po wifi).
Samozřejmě by to chtělo procesor co má MMU.
Jo taky mně teď napadl jeden takovej projekt :) Navigace na kolo s e-ink displejem.
něco tkaovýho ? :-)
http://www.navigadget.com/index.php/2009/05/17...
to by nebylo vůbec špatný, strčit placatou e-ink navigaci do "normálního" mapníku
Na telefonu mně štve, že pořád vypíná displej a nevydrží moc dlouho. GPSka je zase moc velká.
Na tomhle CORTEX M3 spustíš tak maximálně RTOS.
Např. LPC1114FN28 je CORTEX M0 v pouzdře DIP28.
Ještě se dívám že tenhle procesor má strašně moc HW PWM kanálů, takže asi bude stačit jen nastavovat střídu a ušetřit si ten vnitřní for cyklus.
Urcite by bylo vhodnejsi pouzit HW PWM. Akoratze to uz clovek potrebuje o tom procesoru neco malo vedet, zatimco to, co jsem napsal ja (pokud tam neni chyba) by melo fungovat v podstate na cemkoliv.
Jinak bysme samozrejme dosli k tomu, ze tlacitka by bylo lepsi chytat prerusenim a kdyz se nic nemacka, muze procesor vicemene spat (jen trochu, aby to pwm bezelo, na AVR jen idle, nevim co za rezimy ma cortex) nebo delat nejakou jinou uzitecnou cinnost.... :)
A co spotřeba? Ty ARMy budou mnohem žravější než AVRka, ne?
Mužeš použít některý z pokročilejších čítačů a dělat to tedy čistě pomocí hadware a nebo pokud to nemáš přímo v zadání tak přes basic timer/counter a nebo dokonce přes systemový časovač SYSTICK který je součástí jádra M3.
V KEILU založ projekt, vyber procesor, nech ho přidat do projektu startup a můžeš začít pogramovat. Ještě je třeba v detailech projektu vyspecifikovat čím to budeš programovat (ULINK, JLINK atd).
tam je právě kámen úrazu s tim programovánim tendle program sem v životě neviděl a absolutně ho nechápu a učitel nám v něm zadá práci a když sem se ho zeptal na radu tak řekl ať si to najdu na netu a tam sem s tim programovánim bohužel takřka nic nenašel..