 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
matejcek81 Član

Pridružen-a: Pon 16 Mar 2009 12:32 Prispevkov: 1526 Aktiv.: 7.71 Kraj: Maribor
|
Objavljeno: Ned Jan 06, 2013 11:35 pm Naslov sporočila: S čim nadaljevati? |
|
|
Pozdrav,
prosim, vzdržite se odgovorov tisti, ki ne preberete celotnega prispevka. Hvala.
Torej, moja pot mikro-krmilnikov se je začela davnega leta '99 s takrat popularnim PIC 16f84 v ASSEMBLER-ju. Bili so enostavni programčki.
Na fakulteti sem se prijavil z robotkom, ki išče pot iz labirinta. Program sem napisal z basic-om za pic-a, vendar se zaradi bolezni (bil sem v bolnici) tega tekmovanja nisem udeležil.
Nadalje me je pot, kot delavca ponovno zanesla v programerske vode... Nekatere projekte, pri katerih sem sodeloval lahko srečate v določenih nakupovalnih centrih. Katere in kje sem se zavezal, da ne objavim, ker je to del pogodbe.
Žalostno pri vsem skupaj je bilo to, da so želeli samo shemo vezja in HEX kodo. Moj pogoj je bil, da je PIC (edino s čim sem se srečal). Seveda sem ubral najlažjo pot (basic za PIC-a).
Kdaj mi je prekipelo? Dva dni nazaj. Ali sem spesnil program v Basic-u ali v FlowCode-u je bilo isto sranje. Na izhod sem dal signal "delay 10us" in sem pomeril signal s osciloskopom je bil signal 25uS. V FlowCode-u sem imel vsaj možnost namesto bloka dodat "custom C code" in sem spesnil:
Koda: |
delay_us(7);
asm
{
NOP
NOP
NOP
}
|
Na osciloskopu(tektronix tds2002) je bil signal 10us.
Kaj me zanima in zakaj pišem v AVR temo:
Zdaj v poplavi mikro-kontrolerjev te ali druge zvrsti me zanima ali obstaja pri atmelu kakšno orodje, ki mu lahko z ukazom dopovem, da želim 10us pulz na izhodu brez strojne kode?
Res se mi ni problem hecat z temi stvarmi za hobi. Če pa za "delo" in želim izvest projekt (ki me čaka), pa raje natuhtam nekaj drugega kot picbasic, flowcode...
Obstaja kakšen višjenivojski jezik, ki dela to, kar mu zadaš?
npr: pulz 10us na pin "PORTA.0" in da je dejansko 10 mikrosekund?
Seveda PIC odpade, zato sem pisal v to temo.
moje predznanje:
- ASSEMBLER: Zamegljeno (karkoli sem delal sem pozabil razen osnovnih ukazov).
- C: Zelo malo.
- Basic: Kar dobro.
- Visual Basic: Srednje (uporabno).
- Visual - ostalo: nula.
Visual Basic (Visual Studio) me spremlja kar nekaj časa in tudi data-logger sem naredil z njim. Tudi z PoKeys-om(prva liga za ta denar) imam izkušnje.
pa LP
ps: ne me kamenjat  _________________ Če ne gre - ne obstaja! |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Pon Jan 07, 2013 12:45 am Naslov sporočila: |
|
|
Sicer sem šele dobro začel z mikrokontrolerji ampak mislim da ti bom znal pomagat .
Če hočeš natačno prožit impulze je najbolje da uporabiš vgrajen hw.
Torej zelo verjetno bo to nekaj v smislu timerja ali pwm.
Odvisno od procesorja je potem kaj lahko nastaviš.
Večina mikroprocesorjev po mojem podpira to da se izvede samo en cikel timerja ali pwm.
Recimo varianta 1:
- izberem/nastavim znano frekvenco za bazo (recimo 1 MHz)
- izračunam koliko ciklov je pri 1 MHz dolg moj interval (10 us = 10 ciklov)
- nastavim timer tako da postavi izhod na 1 in po 10 ciklih nazaj na 0
- nastavim tudi da se timer po 10 ciklih izklopi
- vklopim timer
Recimo varianta 2:
- nastavim timer ki naj pokliče rutino x vsakih 1 us (recimo Urca1us)
- uporabim globalno spremenljivko PreostanekImpulza in Urca1usVklopiCasovnik
- ko želim sprožiti impulz dolžine 10uS vpišem v PreostanekImpulza številko 10
- in potem v Urca1usVklopiCasovnik na 1
- Urca1us se pokliče vsako 1us
- če je Urca1usVklopiCasovnik == 1: postavi izhod x na 1 in Urca1usVklopiCasovnik na 0 in konča
- če je PreostanekImpulza > 1 odšteje 1 in konča
- če je PreostanekImpulza == 1 postavi izhod x na 0
Pri varianti 2 je že precej pomembno kaj počnemo znotraj Urca1us!
Mora se izvesti v čimkrajšem času (izogibaj se deljenju in moženju).
Edit:
Dodal bi še to da je tole precej osnoven scenarij.
Boljši procesor izbereš, več možnosti bo podpiral (več neodvisnih timerjev, več neodvisnih pwmjev, ...)
Zares se začne zapletati ko moraš pravilno prožiti več impulzov (sploh če so medsebojno odvisni).
Poglej si tudi tutoriale oz. sample za tvoj procesor.
Tudi kak aplication note preberi.
Marsikaj se lahko naučiš iz obstoječe kode če jo analiziraš.
LP, Gregor
Nazadnje urejal/a gregoral Pon Jan 07, 2013 1:44 am; skupaj popravljeno 2 krat |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.06 Kraj: Divača (Kačiče)
|
Objavljeno: Pon Jan 07, 2013 1:13 am Naslov sporočila: |
|
|
Karkoli se boš lotil, bo potrebno dobro poznati arhitekturo mikrokontrolerja.
Filozofijo kako se to rešuje ti je že predhodnik povedal. Največje možnosti do izjemno natančnih rezultatov seveda nudi assembler. No moja ocena je, da je zate ta jezik premalo produktiven. Kot izbira ti ostane torej C. Če naletiš na posamezen del, ki je časovno zahteven, ti C omogoča, da le ta del izvedeš v asm.
V bistvu sem to isto pot prehodil tudi sam. Opustil sem bascom, ker so stvari narejene v njem delale preveč nezanesljivo in ker nisem imel možnosti dostopa do vseh resourcev mikrokontrolerja. Imel pa sem to srečo, da se mi je zataknilo že pri mjem 4 ali 5-tem projektu in nisem zapravil preveč časa. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Jan 07, 2013 9:43 am Naslov sporočila: |
|
|
Predhodnika sta v glavnem vse povedala. Za natančen čas odpade notranja ura. Vzeti boš moral kristal. Procesor pa boš moral zagnati čim hitreje. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Pon Jan 07, 2013 10:04 am Naslov sporočila: |
|
|
V bistvu je bilo že vse povedano... Sam se ponavadi izogibam višje nivojskim jezikom takrat, ko želim popolni nadzor nad kontrolerjem. Zato tudi vse take kritične dele naredim v assemblerju. Sam assembler niti ni težak, bolj je problem v tem, da verjetno delaš vsake toliko časa in vmes pozabiš. Enako je z arhitekturo mikrokontrolerja. Sam sem začel s PICi, potem preklopil na AVRje, vmes malo "počival", sedaj me je spet prijelo in sem "na novo" začel z XMegami, potem pa sta me oba Volk-a spravila na LPCje. Ta zadnje spoznavam skozi C in mi natančnost ciklov/časa zaenkrat ni bistvenega pomena.
Glede internega RC oscilatorja je pa tak. Sam največkrat ploščico naredim brez, pustim pa test-pointe za kalibracijo preko externega kristala, ki ga začasno priključim, toliko, da internega skalibriram. Primer za to (za AVRje) je tukaj (vsaj ideja): http://www.atmel.com/Images/doc8002.pdf |
|
Nazaj na vrh |
|
 |
matejcek81 Član

Pridružen-a: Pon 16 Mar 2009 12:32 Prispevkov: 1526 Aktiv.: 7.71 Kraj: Maribor
|
Objavljeno: Pon Jan 07, 2013 2:14 pm Naslov sporočila: |
|
|
Hvala za odgovore,
za oscilator sem uporabil 20MHz kristal. Pač me je razjezilo, da če dam v višje-nivojskem razvojnem okolju blok, ki zakasni signal za 10us to tudi pričakujem. Vse pogoje sem izpolnil, vendar na forumu od FlowCode piše, da za kakšne male čase bolje uporabit assembler. Zakaj pa potem omogočajo zakasnitve ranga mikrosekund ? Za manj zahtevne aplikacije je super, saj osnovni programček vržeš skupaj v par minutah, podpira dosti periferije, prekinitve, itd.
Pač sem se odločil, da preklopim na nekaj druga.
Sem zasledil prav, da za določene atmele ne potrebujemo programatorja in se dejansko programirajo/debuggirajo preko USB?
Ali velja to samo za Arduino?
Hvala za pomoč in LP _________________ Če ne gre - ne obstaja! |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Pon Jan 07, 2013 2:34 pm Naslov sporočila: |
|
|
Da, atmele z vgrajenim USBjem lahko programiraš direktno s FLIPom (preko bootloaderja). No, saj lahko tako programiraš tudi ostale, samo prvič mu moraš bootloader gor dati in potem preko UARTa kodo gor poslat.
Glede časovnih težav v višjenivojskih jezikih je po mojem prej problem v samem programiranju kot v jeziku: če ti npr. v ozadju tečejo neki interrupti, ti pa za pulz uporabiš "navadno" wait komando ti bo ta logično trajala dlje časa kot bi morala, saj se vmes izvajajo še druge stvari (interrupti). In pa seveda uporaba kvarca je obvezna, interni oscilator preveč niha.
Sam delam v Bascomu, CodeVision-u in nekaj se trudim s Keilom (kaj češ, treba malo naprej v ARMe pogledat - so precej cenejši in zmogljivejši).
Pri Bascomu pogrešam, kot so že prej napisali, da velikokrat sploh ne veš, kaj se v ozadju dogaja. Dokler vse dela po pričakovanjih (no, in to je pogosto!) je super. Ko se začnejo dogajati čudne stvari in ko kodo pogledaš že stotič in še vedno ne veš, kje je problem, potem se pa začneš malo "čohati" in brskati po raznih knjižnjicah (ki so itak spisane večinoma v assemblerju) in na koncu ugotoviš, da v bistvu nisi ti zaj ... Tudi pregleden ni najbolj.
CodeVision mi je zelo pri srcu kot C prevajalnik, ker ima fletnega "wizzarda", s katerim že v štartu narediš precej kode, s katero bi se sicer kot začetnik mučil. Je pa program, se mi zdi, že malo zastarel. Sam razmišljam, da bom počasi šel na Arduino (tudi C), predvsem zaradi odlične podpore, kupa primerov za vse živo ... Všečen C compiler mi je tudi od Mikroelektronike, a je baje precej hroščat.
Če imaš voljo in čas, bi mogoče šel rajši v smer ARMa, ker so cenejši in bolje opremljeni kot AVR. Heh, pa še glede programiranja je fukiš (ne podpirajo tega vsi): ga na USB vidiš kot "removable drive", skopiraš gor hex, resetiraš in je to to!
LP, g _________________ ...lahko pa se tudi motim ...
Nazadnje urejal/a mucek Pon Jan 07, 2013 2:36 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
PZUFIC Vseved


Pridružen-a: Sob 17 Nov 2007 19:06 Prispevkov: 6987 Aktiv.: 32.64 Kraj: Rakek
|
Objavljeno: Pon Jan 07, 2013 6:17 pm Naslov sporočila: |
|
|
Ko ga začne Flowcode srati, ga serje tako, da v simulaciji vse dela na krmilniku pa nič. Sem delal zgolj neko prižiganje in ugašanje portov z 0,5-1s zakasnitvijo. No ko me je dokončno spravilo na obrate sem inštaliral MikroC, napisal 5 vrstic kode, naložil in je delovalo. Drugače sicer uporabljam Basic in je zaenkrat za moje potrebe dovolj. Poleg tega verjetno Flowcode vtakne v program vse kar potrebuješ in ne potrebuješ. Sicer to verjetno naredi tudi Basic, ampak domnevam, da v manjšem obsegu. _________________ Ne čakaj, da se bo nekaj premaknilo pojdi in nekaj premakni.
Lp Primož |
|
Nazaj na vrh |
|
 |
matejcek81 Član

Pridružen-a: Pon 16 Mar 2009 12:32 Prispevkov: 1526 Aktiv.: 7.71 Kraj: Maribor
|
Objavljeno: Pet Jan 18, 2013 2:12 pm Naslov sporočila: |
|
|
Hvala za nasvete.
Nekako se nagibam k arduino razvojnim okoljem. Za začetek bom naročil nano-ta.
Zanima me, če bi tale kombinacija delovala:
- NANO
- ISP Programator
- PIN adapter
Programator bi uporabil za nalaganje boot-loaderja.
Prosim za nasvet.
Hvala in LP _________________ Če ne gre - ne obstaja! |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Pet Jan 18, 2013 2:51 pm Naslov sporočila: |
|
|
Če boš nabavil Adruino nano, imaš bootloader že gor in programatorja sploh ne rabiš ...
(je ga pa koristno imeti, če kaj zaflashaš )
Bootloader imajo že tovarniško naložen tudi vsi Atmeli z USB podporo (programiraš s Flip-om).
LP, g _________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
 |
matejcek81 Član

Pridružen-a: Pon 16 Mar 2009 12:32 Prispevkov: 1526 Aktiv.: 7.71 Kraj: Maribor
|
Objavljeno: Pet Jan 18, 2013 3:48 pm Naslov sporočila: |
|
|
@mucek:
Ja, to mi je jasno, da je bootloader že gor. Gledal sem tisto opcijo, da lahko stlačiš gor bootloader, ki deluje z bascomom. Ker sem v Cju razmeroma svež, bi kaj takšnega prišlo prav. Nabavil bi dva nanota. Eden bi deloval z bascomom, drugi z arduino C-jem. Zraven tega bi prišel programator prav, če bi kakšno svojo platico naredil.
Zanima me, če lahko s tem programatorjem programiram arduino bazirane mikrokontrolerje.
Sicer ne vem, zakaj je pri nano-tu spodaj še en ogromen IC prispajkan. Čemu služi? za RS232/USB mi izgleda kar velik. Kakšna ideja?
LP _________________ Če ne gre - ne obstaja! |
|
Nazaj na vrh |
|
 |
cimer Član

Pridružen-a: Sob 07 Okt 2006 0:07 Prispevkov: 122 Aktiv.: 0.54 Kraj: Ljubljana
|
Objavljeno: Pet Jan 18, 2013 4:10 pm Naslov sporočila: |
|
|
Pozdrav,
Nanota lahko programiraš tako iz Bascom okolja kot tudi iz arduino razvojnega okolja. Bascom podpira uporabo arduinotovega bootloaderja. Poglej v help od Bascoma. Tam piše kako moraš v Bascomu nastaviti parametre za arduino bootloader. _________________ Lep pozdrav!
Marko S. |
|
Nazaj na vrh |
|
 |
Obelix Član

Pridružen-a: Pon 19 Maj 2008 13:59 Prispevkov: 1881 Aktiv.: 9.05 Kraj: Maribor
|
Objavljeno: Pet Jan 18, 2013 4:17 pm Naslov sporočila: |
|
|
matejcek81 je napisal/a: |
Sicer ne vem, zakaj je pri nano-tu spodaj še en ogromen IC prispajkan. Čemu služi? za RS232/USB mi izgleda kar velik. Kakšna ideja? |
Pa je za komunikacijo z USB (FT232R?). Pa sploh ni velik. Za nas, ki že malce slabše vidimo, je za spajkanje jeb... majhen  |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Pet Jan 18, 2013 5:04 pm Naslov sporočila: |
|
|
Z ISP programatorjem lahko programiraš vse AVR kontrolerje družin Mega in Tiny (razen 6 pinskih). To, kaj uporabljaš zadaj (okolje: Bascom, Arduino ...) nima veze, programator pač rabi HEX kodo in to je to.
Kot je povedal že predhodnik, ne rabiš dveh platk, da bi uporabljal 2 programa; tudi Bascom omogoča Arduino bootloader, pa tudi če ga ne bi, bi lahko še vedno program skompajlal v Bascomu in potem iz Arduino okolja naložil HEX kodo, zgenerirano v Bascomu.
LP, g _________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
 |
Jaka57 Moderator



Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5819 Aktiv.: 24.56 Kraj: Grosuplje
|
Objavljeno: Pet Jan 18, 2013 6:40 pm Naslov sporočila: |
|
|
Če boš kupil dva nano-ta potem niti ne potrebuješ ISP programatorja, ker je lahko nano sam po sebi ISP programator. Je pa dobro, da ga imaš, saj gre nalaganje bootloaderja hitreje.
Bootloader je za Arduino IDE (prevajalnik je GCC) kot za Bascom enak.
Bootloaderjev je na Netu kar nekaj, ki se v glavnem razlikujejo glede na uporabljen kontroler.
Jaz imam na svojih Arduino-tih naložen Optiboot boot loader, ki je bistveno manjši od ostalih in tudi nalaganje programa je hitrejše.
Kot je @mucek napisal, kontroler potrebuje HEX kodo, katero običajno naložiš v kontroler s programatorjem. V primeru Arduina in še nekaterih drugih "platform" pa programatorja ne botrebuješ, saj zato poskrbi bootloader in HEX, ki ga dobi preko USBja, naloži v flash. _________________ Lp, Jaka |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|