Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   798 / 798
(#) rascal válasza TavIR-AVR hozzászólására (») Szept 16, 2018 /
 
Sziasztok! A szétfeszítő ellenállás mi fán terem? Most hallottam ezt a kifejezést először.
(#) Sick-Bastard válasza rascal hozzászólására (») Szept 17, 2018 /
 
Szerintem az ebben a kapcsolásban található 620 Ohm-os R3-R5 fel-/lehúzó ellenállások (talán R4 is) együtt képezik a szétfeszítő ellenállást.
(#) killbill válasza Sick-Bastard hozzászólására (») Szept 17, 2018 /
 
Igen, de ezt széthúzónak szokás nevezni, nem szétfeszítőnek.
(#) rascal válasza killbill hozzászólására (») Szept 17, 2018 /
 
Köszi a válaszokat! Valójában egyik változatot sem hallottam még, felhúzó és lehúzó ellenállásokkal volt eddig csak dolgom, így együtt nem tudtam, hogy külön nevük van. Visszanézve már látom, hogy TavIR-AVR már megírta, hogy mire is valók, csak elsiklottam felette.
(#) fifadani hozzászólása Szept 20, 2018 /
 
Sziasztok!
A problémát még nem sikerült detektálnom. A max-os modulokat lecseréltem, sn75176-ra. 120ohm lezárás, 720 ohm fel és lehúzó, 3 eszköz a buszon.
Megpróbálom a szoftveres részét kizárni.
Viszont egy kérdés.
Watchdog és/vagy BODEN segíthet?

Köszi,
Dani.
(#) Rolie11 hozzászólása Szept 22, 2018 /
 
Üdvözlet!

Keresek AVR program megírására gyors, megbízható embert! Nem ingyen meló!

Köszönet!
(#) dc001 hozzászólása Okt 3, 2018 /
 
Valaki találkozott olyan esettel, amikor a i2c slave üzemmódban "eltünt" a TW_ST_SLA_ACK, rögtön TW_ST_DATA_ACK-val indul a kommnikáció?

Illetve mi lehet a 0xe0 státusz jelentése?
(#) Szasza9668 hozzászólása Sze, 22:51 /
 
Sziasztok!

4mhz járatott avr-nek mennyi ideig tart végig menni egy if then cikluson ami kb 60 számot tartalmaz? Hogyan tudok ennek utána járni, estleg kiszámolni?

Üdv!
(#) Kovidivi válasza Szasza9668 hozzászólására (») Sze, 22:58 /
 
Egy körülbelüli számolás, ha egy if, egy órajelig tart (ami valószínű, ahogy utána olvastam), plusz utána is van egy utasítás, ami csinál valamit, ezt is 1-nek veszem:
1 órajel tart: 1/4 000 000sec=0.25us, 60 db if, plusz az utána levő utasítás 120 órajelet igényel, vagyis 120x0.25us=30us. Javítsatok ki, ha valami hibás. De tudsz szimulátorban debuggolni, és ott pontosan látszani fog, hány órajelet igényel a programod.
(#) Szasza9668 válasza Kovidivi hozzászólására (») Csü, 5:57 /
 
Köszi!
(#) kapu48 válasza Kovidivi hozzászólására (») Csü, 9:48 /
 
Szerintem nagyon le egyszerűsítetted az if-then műveletet.

Vegyük példának:
if(A==B){nem tudtuk meg, hogy itt mi van!}
1. betöltjük ’A’-t valamelyik regiszterbe
2. betöltjük ’B’-t …
3. összehasonlítjuk A==B? {}
4. És a 60 számot szintén be kel tölteni a memóriából regiszterbe, hogy tudjunk velük valamilyen műveleteket végezni …
Az sem megy 1 órajel alatt, főleg ha a számunk pl, int? Az már 2 Byte.
A hozzászólás módosítva: Csü, 9:50
(#) Kovidivi válasza kapu48 hozzászólására (») Csü, 12:30 /
 
Egy nagyon egyszerű esetet számoltam. A szimulátor fogja pontosan megadni, hány órajelig tart ez a programrész.
Tanultunk pipeline-ról, egyszerre megy a memória olvasás és a feldolgozál, de nem vagyok ebben a témakörben szakértő.
"Since AVR is a RISC architecture, most instructions only take a single cycle to execute. "
A hozzászólás módosítva: Csü, 12:31
(#) Sick-Bastard hozzászólása Csü, 12:50 /
 
Bocsi hogy mellékletként rakom fel a kérdésem, de valamiért nem jelenik meg....

kérdés.txt
    
(#) kapu48 válasza Kovidivi hozzászólására (») Csü, 13:36 /
 
Nem tudom, mire gondolsz?

Ha rámutatnál melyik asm feltételes ugrás utasítás vizsgál meg 2 ram címen levő változó egyezőségét?
Bővebben: Link
(#) Kovidivi válasza kapu48 hozzászólására (») Csü, 13:57 /
 
Írtam, hogy nem vagyok profi a témában, assemblyben nem tudok programozni. Ha érdekel a téma olvass utána, tőlem ennyit tudtál tanulni csak, az irányt ismerem, ha nekem kelleni fog további infó, el tudok indulni.
Vagy ha tudod a megoldást, írd meg a kérdezőnek.
Gondolkodok, de nem tudok többet hozzárakni.
A hozzászólás módosítva: Csü, 14:00
(#) kapu48 válasza Sick-Bastard hozzászólására (») Csü, 14:00 /
 
Nem tudom, hogy ez a szövegszerkesztő tréfája e?
  1. De Xor ’^’ operátor nem lehet a nevekben!
(#) Sick-Bastard válasza kapu48 hozzászólására (») Csü, 14:48 /
 
Elnézést, próbáltam egyszerűsíteni a kódot, de ezek szerint félreérthető voltam.

A tömb^0 csak példa, úgy értettem, hogy tömb0, tömb1, ... stb.
tömb2 = text, ami a probléma részét képzi.
(#) kapu48 válasza Sick-Bastard hozzászólására (») Csü, 15:01 /
 
A pointerek kezelésében én is mindig bizonytalan vagyok.
De talán ez a könyv segít neked is: Bővebben: Link
5.3. Mutatók és tömbök
(#) Szasza9668 válasza kapu48 hozzászólására (») Csü, 22:06 /
 
Van egy változóm 0 és 59 közötti értékkel. Ez random változik de mindig pozitív egész szám. Nekem attól függően mennyi ez az érték kell fel le mozgatnom 5 lábat az avren. Az érték elég gyorsan változik 300msec( most pontosabbat nem tudok mondani).

Select case gyorsabb lenne?
(#) rascal válasza Szasza9668 hozzászólására (») Csü, 23:44 / 1
 
Én valamilyen tömbös megoldást javasolok, ahol a 0-59 érték a mutató és a tömbből kivett érték kerül a portokra. Ennek az az előnye, hogy bármelyik érték esetén ugyan akkora lesz a választás futásideje és gyorsabb is lesz mint az if, vagy a case. Ha összetettebb dolgot kell csinálni, akkor mutatókat rakhatsz a tömbbe, amikkel ha kell mind a 60 esetre egyedileg megírt programrészletre ugorhatsz.
(#) Kovidivi válasza Szasza9668 hozzászólására (») Pé, 6:30 /
 
300ms nem tragikus. Amit számoltam, ott ns-ot írtam, 1ms ezredrésze. Nem elég ekkora sebesség? A pointeres tippek nagyon jó ötletek! Viszont komolyabb programozói tudást igényel.
(#) killbill válasza Kovidivi hozzászólására (») Pé, 9:14 / 2
 
A ns a ms milliomod része.
(#) Szasza9668 válasza rascal hozzászólására (») Pé, 16:16 /
 
Ezen elmélkednem kell.
Jónak tűnik.
Kérdéses azonban az agyi kapacitásom, mármint ami a programozói tudást jelenti.
De tetszik, nem mellesleg biztosan tanulnék belőle ezt azt!

Üdv!
(#) rascal válasza Szasza9668 hozzászólására (») Pé, 17:51 /
 
Egy kis segítség az elmélkedéshez: Kimazsoláztam egy régebben írt programomból, hogy én hogyan csináltam hasonló dolgot. (Az egészet nem adhatom közre.) Kicsit kommenteltem is. Nem teljes, nem is AVR-hez készült, ezért a típus és változó deklarációk nem vehetők át egy az egyben. Több mint egy éve nem programoztam és a C egyébként sem a szívem csücske, ezért sokkal többet nem nagyon tudok hozzátenni.

  1. // Ez van a .h-ban
  2.  
  3. // Megvallom rég volt... Talán ez mondja meg, milyen felépítésű függvényeket akarunk hívni, és milyen tipusú a pointer. Ez ARM-en Atollic studioban működött. AVR-en lehet, hogy más a jó.
  4.  
  5. typedef uint32_t (*lista_fn_def)(void);
  6.  
  7.  
  8. // Nekem a hívandó fv-k címe mellett más paraméterek is kellettek. Ha neked nem kell egy dimenziós tömböt is használhatsz.
  9.  
  10. typedef struct
  11. {
  12.         lista_fn_def fnpnt;     // menüpontot végrehajtó függvény pointere.
  13.         uint8_t mode;   // menü üzemmódok - ebben a kivonatos kódban nem használjuk semmire.
  14. }lista_element_tdef; // menu leíró tömbhöz struktúra.
  15.  
  16. // ez van a .c-ben
  17.  
  18. #define LEN_LISTA (sizeof lista_elements/ sizeof (lista_element_tdef)) // a lista hossza elem számban - itt nem használjuk
  19.  
  20. uint32_t fuggveny_00(void); // felsorolom a függvényeket, amiket majd a kapott paraméter alapján hivogatni akarok
  21. uint32_t fuggveny_01(void);
  22.  
  23. // bepakolom a címeiket egy tömbbe
  24. lista_element_tdef lista_elements[]={
  25.                 {.fnpnt=&fuggveny_00,.mode=1},
  26.                 {.fnpnt=&fuggveny_01,.mode=0}
  27. };
  28.  
  29. // megvalósítom a függvényeket. Nekem kellett visszatérési érték, de neked nem biztos, hogy kelleni fog.
  30. uint32_t fuggveny_00(void)
  31. {
  32.         // csinálunk valamit
  33.         return 0;
  34. }
  35.  
  36.  
  37. uint32_t fuggveny_01(void)
  38. {
  39.         // csinálunk valamit
  40.         return 0;
  41. }
  42.  
  43.  
  44. // a végrehajtást felügyelő függvény
  45. void lista(lista_element_tdef *aActiveLista)
  46. {
  47.         int32_t nListaPos;      // Ez az a paraméter, ami nálad 0-59 közötti érték lesz
  48.         uint32_t nStatus;       // meghívott függvény visszatérési értéke
  49.         nStatus=(*aActiveLista[nListaPos].fnpnt)(); // itt hívódik meg az éppen szükséges függvény.
  50. }
  51.  
  52.  
  53. // valahol a programban: nekem több listám volt, ezért a listát paraméterként adtam át a végrehajtást felügyelő függvénynek.
  54. lista(lista_elements);
(#) Szasza9668 válasza rascal hozzászólására (») Pé, 19:54 /
 
Köszi!

A c nekem teljesen kínai. Bascom-ot használok. Nekem ez csak hobby.

neten utána olvasok majd.
(#) wbt válasza Szasza9668 hozzászólására (») 8:44 /
 
Lookup tábla megoldja neked a dolgot, egy olvasás, egy írás a portra.
Következő: »»   798 / 798
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu