se mi zda jako blbost, ale mrknu na to, diky za upozorneni
trochu debilni nevyhoda… FUJ
Jo, jinak rad bych Vas trochu poopravil: zjistil sem že atmega 8 nema ani JMP. A k te chybe: CALL (i JMP) má už ATmega16
právě jsem na to koukal do datasheetů
Pokud bych ten programek napsal tak, ze bude generovat pouze potrebny pocet smycek, bylo by to temer bez omezeni s minimalnim intervalem 20 strojovych cyklu.
Ale jelikoz jsem velmi linej clovek, tak si to jeste rozmyslim
pri pouziti vzdy 2 smycek bude rozsah od 27 - 195.861 cyklu, tj. 1,7us - 12,2ms @16MHz
3 smycky: 34 do 49.939.990 cyklu, tj. 2,125us - 3,1s @16MHz
4 smycky: 41 - 1,27e10 cyklu, tj. 2,56us - 13min 16s @16MHz
5 smycek: 48 - hodne, tj. 3us - 56,5h (priblizne) @16MHz
10 smycek: asi 83 - hodne moc, tj. 5,2us - 7e9 roků @16MHz
Tak si vyber, kolik smycek budes chtit…
Jinak lze jeste rozsah kazde smycky roozsirit pridanim nekolika NOPů…
Dobry den,
do akej miery je rozumne, aby procesor cakal v slucke napriklad 1 minutu a okrem toho vobec nic nerobil? A to ani nedal znat, ze je vsetko OK a zije?
Ak ma byt nacasovanie cez slucku presne, nesmu sa ani pouzit prerusenia, napriklad od komunikacie. Pre male (do 50us) casy mozno. Ale pre dlhsie casy je mozno rozumnejsie nastudovat pouzitie hw casovacov a z nich urobit pocitadlo pre dlhe casy. Obsluha casovacov je v celku jednoducha.
Mohlo by to vyzerat asi tak, ze hw casovac da prerusenie kazdych 100us a v ramci toho prerusenia sa dekrementuje napriklad 2B premenna (cca do 6.5 sek), respektive sa po vynulovani prvej premennej moze dekrementovat dalsia 2B premenna a potom to bude az do 119 hodin.
dekrementovat 2B premennu mozes jednou instrukciou
SBIW Rdl, 1 (dva takty), alebo aj inou
LD Rd, -Y
ci niecim podobnym (akurat hodnota v Rd bude zbytocna). Je to jedno.
Samozrejme to prerusenie od casovaca moze byt omnoho redsie. Ale ak by si si chcel vytvorit internu casovu zakladnu od ktorej sa odvija viac inych veci v procesore, 100us je dost jemny casovy krok. Ja pouzivam zakladny casovy krok 500us a zatial mi to na vsetko stacilo.
Martin
jj, jan16 se akorat chtel pouziti casovacu vyhnout pro pripad, ze by nemel zadnej volnej. Ale pokud se nektery flaka, tak je rozhodne lepsi ho vyuzit.
Takhle to ale není! AVR s pamětí FLASH do 8KB včetně žádné call a jmp nepotřebují a proto je také nemají. 8KB = 4Kword. Rozsah rcall a rjmp je ±2Kword, tedy obsáhne celý adresový prostor, který se jeví jako uzavřený do kruhu. Po adrese 0x0FFF následuje 0x0000, tedy opět začátek. Proto relativní skok nemůže nikdy opustit adresový prostor. Tuto skutečnost sdělíte překladači zaškrtnutím volby Wrap Relative Jumps.
tim lip pro nas
Prvni verzi(nez najdete nejaky chyby) uz mam, tak muzete zkouset
AVR_DelGen.zip (6.28 KB)
Objevil sem ti fatální chybu - nejde to spustit
“Správní inicializace aplikace (0xc0000135) se nezdařila. Klepnutím na tlačítko OK můžete aplikaci ukončit.”
trochu detajl
Jinak moc moc díky, v čem si to programoval? Delphi? Můžeš mi poskytnout zdroják? (pokud teda chceš mi to poskytnout) - díky
Ahoj, Honza
PS: ještě jednou moc diky za vymyšlení toho algorytmu na generování těch smyček
Ted mezi ci klavesnici a zidli je chyba?
Je to v C#(MS visual studio 2005, mimochodem legalni ), potrebuje to mit nainstalovanej .NET 2.0, kterej si stahni od MS
microsoft.com/downloads/details.aspx?displaylang=cs&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5
Zdrojaky dat muzu, ale je to dobytkarna, je to polepeny jen z toho nejnutnejsiho aby to chodilo Radsi bych se tim vnitrkem moc nechlubil
a nemoh bys to přeprogramovat tak, aby toi nepotřebovalo takový kraviny jako NET.2.0 ?? Na co to vůbec tohle potřebuje?
Jinak tim zdrojákem nepohrdnu, hlavně když to bude fachčit, z cčka si to přelouskám do FreePascalu a nějak o snad rozchodim Můžeš mi poslat nebo to sem vložit ten zdroják? Stačil by ten algoritmus toho generovani s trochou popisu, mě se totiž žádnej algoritmus zatim nepodařilo vymyslet… .
Pro .NET se pise stale vic programu, a jesli myslis, ze se to zmeni, jsi na omylu Dnes neni vzhledem k hardwaru ani tak dulezita narocnost, jako rychlej vyvoj a vyssi bezpecnost (blbuvzdornost vuci programatorum amaterum jako treba ja). Takovy veci jako pascal uz maji svych 15 min slavy za sebou
Nasal jsem to a odladil asi za 2 hodky… zadnej super vykon, ale jsem zvedavej na tvuj pascal (ale asi to bude rychlejsi nez C++)
algoritmus je vcelku jednoduchej.
- odhat potrebnyho poctu smycek (logaritmus o zakladu 255 z potrebnyho poctu IC)
- skutecna delka cyklu vcetne rcall: [13 + 4pocet_smycek + …k4(3+k3*(3+k2*(3+k1*(3+0))))]
Zde je treba “naladit” konstanty k1-kn pro minimalni odchylku (ten vzorec jsem vymejslel vcera 2h u avr simulatoru… Tam kde je “0” se da napsat k0 a cislo, ktery by vyslo by byl pocet vlozenych "NOP"u) - vypis ZK
Pokud bys nahodou chtel delat primo s timhle zdrojakem, MS uvolnil uplne nejzakladnejsi verzi visual studia pro nekomerci zdarma (aspon driv to tak bylo)…
Nepouzivam zadny vlastni tridy a podobny veci, tak to snad zvladnes… jsem zvedavej
Nicmene ja .NETem nepohrdnu, psani ridicich aplikaci pro mcu na serivym portu (nebo na usb pres ftdi) je naprosto primitivni Ani k tomu nepotrebujes zadnou knihu. VS je parada. si tak klikam ve tridach a namespaces a najednou vidim “IO”, mrknu tam a hle… “serial”… a prace se seriovym portem jak na dlani bez studovani hord materialu…
AVR_DelGen_project.zip (78.5 KB)
jj dik, planej poplach, pred 15ti minutama jsem přišel možná na lepší a přesnější algoritmus, neni to odhad, lze to vcelku jednoduše zpočítat. Zejtra sem napíšu jak jsem to vymyslel.
Kdo řikal že tu někdo programuje v pascalu? nevšim jsem si toho… Mezi pascalem a FREEpascalem je sakra rozdíl… Nezdá se to, ale ve freepascalu píšu jednoduchý 3D programy v OpenGL, na 3D hru jsem se zatim nezmohl A SDL asi možná taky znáš - to používám taky
I tak díky, mrknu na to!
Ahoj, Honza
Jan16: Kdyby ten soft nebyl německy…
Dá se přepnout do angličtiny.
Ale je tak jednoduchý, že stačí znát asi 5 slov.
- Nastav žádaný počet cyklů (Cycles) nebo čas (Time/sec)
- Nastav kmitočet oscilátoru (Cycle rate)
- Stiskni tlačítko GO.
Případně je nahoře možno zvolit, které registry použije
Díky, OK, tak jako s Němčinu se ve škole sice učíme, mě jde ok, ale učitelka nás neučí nic užitečnýho. Víme sice kopu gramatiky, slovíček taky kopu umíme, ale neumíme poskládat kloudnou větu. No já bych si s tim poradil i v tej němčině, to měla být spíš taková poznámka bokem Ale jestli to umí angličtinu, tím líp
Tak sem si opatřil ten soft na generování těch zpožďovaček. Kupodivo tu funguje
Snad ještě dneska odpoledne nebo zejtra odpoledne to rozfachčim - to blikání LEDkou
Jinak pomalu začínám těm AVR porozumívat, pročet jsem si datasheet od ATmega8, prošel jsem si instrukční soubor (samozřejmě english to neni problém )
Už jsem pochopil jak funguje Z flag (zero flag). To mi zatim stačí, ještě ale potřebuju nastudovat pár bitových operací: nastavení bitu, vynulování bitu, negace bitu. Pak to půjde už snadno (doufám)
Tak už jsem se přiměl k tomu, že budu pokračovat. NAšel jsem si instrukce pro nastavení bitu v IO registru (SBI) a vynulování - // - (CBI). Hups, jen jsem nenašel instrukci, která by vytvořila negaci bitu v IO registru - jak soe to teda dělá??
Taky jsem si zjistil něco o tom jak fungují registry DDRx PINx PORTx.
Stále se snažím přijít na to, jak znegovat libovolný pin nějakýho IO registru. Nic mě stále nenapadá. Poradíte pls?
Díky, Honza
ty mi davas… se to snad jeste naucim… primo instrukci negace jsem nepotkal (treba jsem jen slepej), ale da se pouzit XOR - tam, kde je v druhym operandu “1”, tam se bude ten prvni negovat…
ldi r16, 0x08 ;bude se negovat bit 3
in r17, PORTB ;pokud chci pouze negovat a nezajima me,
;co se venku deje, je lepsi cist vystupni registr
eor r17, r16
out PORTB, r17