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   420 / 840
(#) Reggie válasza sikolymester hozzászólására (») Márc 4, 2012 /
 
Ezekbol hianyzik kb. minden. Szintillesztes, kondicionalas, stb...
(#) sikolymester válasza Reggie hozzászólására (») Márc 4, 2012 /
 
Ám lehet, cserébe nekem remekül működik. Jól jött már néhányszor, ezért az árért amúgy sem várok csodákat.

Természetesen ha rám szakadna a bank, akkor az eredeti 16 csatornásat venném meg.
(#) Tomi_Bp válasza zombee hozzászólására (») Márc 4, 2012 /
 
Köszönöm a gyors választ!
Az SD kártya egyik lába sincs 5V-on, tehát ez nem okozhatja.
Ezzel a hibaüzenettel "Card Initialization failed.." fagy ki, ami a mellékletben található.
Mellékeltem a kódrészletet, hátha így jobban átlátjátok a hiba forrását és tudtok segíteni. Ha nem jutok dülőre, tényleg tüneti kezelést kell alkalmaznom és jön a Watchdog Timer.
Előre is köszi!
(#) zombee válasza Tomi_Bp hozzászólására (») Márc 4, 2012 /
 
És ha megpróbálkoznál magának az SD-kártyának az újraindításával? Tápfesz elvétel/visszaadás?
Vagy ezt a műveletsort többször is elvégezni? Biztosan valami azzal oldódik meg hogy az AVR elengedi
a portlábakat. Ahol épp RESET-elnél, tegyél egy DDRx,PORTx=0-t, majd várj egy másodpercet és kezdd újra!
(#) Tomi_Bp válasza zombee hozzászólására (») Márc 4, 2012 /
 
Köszönöm zombee!
Kivettem a végtelen ciklust a hibajelzőből és többször inicializálom a kártyát egymás után, így már tökéletesen megy tápfesz ráadáskor is, nem csak RESET után!!! Köszi mégegyszer mindenkinek, aki segített!
(#) Mezoas válasza sikolymester hozzászólására (») Márc 4, 2012 /
 
Ez tényleg hasznos lehet.
Az egész olcsó ezen az oldalon 41$-t jelent (1 db esetén). Ez tényleg az olcsócska kategória?
(#) Reggie válasza Mezoas hozzászólására (») Márc 4, 2012 /
 
Igen. Bar parhuzamos portra olcsobban csinalsz, de rosszabb is lesz. De te is ossze tudod rakni magadnak, csak vedd meg az az EZ USB-s mikrokontrollert es kb keszen is van.
(#) mzozo95 hozzászólása Márc 4, 2012 /
 
Sziasztok!

Atmega48A t próbáltam programozni AVRISP mkII-vel, a fordító(avr studio 4) kiírta, hogy felprogramozás sikeres volt, ám semmi sem történik igazából... A program szerint az avr-nek fel kellene kapcsolnia két ledet(csak tesztelném, hogy működik e), de nem csinál semmit, ez a programom:

  1. #define F_CPU 8000000
  2.      
  3.     #include <avr/io.h>
  4.     #include <util/delay.h>
  5.      
  6.     int main(void) {
  7.      
  8.        DDRB = 255;  
  9.        PORTB = 255;
  10.      
  11.               while(1){};}




Valaki tudna segíteni a uC életre keltésében?
Előre is köszönet!
Zoltán
(#) Tomi_Bp válasza mzozo95 hozzászólására (») Márc 4, 2012 /
 
Szia! Nem megsérteni szeretnélek, nem tudom milyen szinten vagy! A LEDek polaritására figyeltél?
Ajánlom figyelmedbe a következő cikket:Link Ha így sem megy, segítünk! Üdv.
(#) Mezoas válasza Reggie hozzászólására (») Márc 5, 2012 /
 
Megnéztem, de nem nagyon van hozzá működő firmware.
Még gondolkozom. Esetleg ha valakinek kell, több ilyen logic analyzer olcsóbb, dobjon egy üzenetet.
Bár nem értem, az ebay-en miért nem kínálnak ilyet.
(#) sikolymester válasza Mezoas hozzászólására (») Márc 5, 2012 /
 
Hát, tekintve, hogy a kütyü 15 USD, csak a szállítás kerül sokba, így úgy gondolom, hogy igen ez egy olcsó dolog. Megjegyzem, hogy az eredeti 145EUR szállítással együtt (130 a kütyü, 15 a szállítás).

Amennyiben pedig többed magaddal rendeled a klónt, akkor kijön aprópénzből egy darab.
Mindazonáltal az egészet magad is klónozhatod különösebb felhajtás nélkül. Elég egyet visszafejteni, mivel semmilyen védelem nincsen benne gyakorlatilag. Ha majd egyszer nagyon ráérek talán reverse engineerelem.

Ja és amúgy azt hiszem, hogy Európa más részeire az aliexpress olcsóbban szállít. Ha van ismerősöd ausztriában, rendeld oda, ő továbbpostázza neked és voilá. Ez az infó amúgy megerősítésre szorul, megnézni nem árthat.
(#) szdani hozzászólása Márc 5, 2012 /
 
Egy elég egyszerű dolgot szeretnék, neten nem találtam érthető leírást, gombnyomásra szeretnék vezérelni, mondjuk egy led-et de nem tudom hogyan lehet egy láb állapotát beolvasni c nyelven. Tud valaki segíteni?
(#) Suncorgo hozzászólása Márc 5, 2012 /
 
Sziasztok

AVR-el hogyan szokták megoldani pl az 50Mhz-ig a freki mérőt?

Van egy gondolatmenetem de nem biztos hogy jó:
-az egyik timer számlálójának léptetése a külső lábon (T0)
-eközben pl 0.25 másodpercenként megszakítás, számláló leolvasás,kiírás és nullázás.

Így megoldható?
(#) sikolymester válasza Suncorgo hozzászólására (») Márc 5, 2012 /
 
Őőő, lehet, hogy én nem vagyok elég pró, de egy max 20MHz-en ketyegő 8 bites AVR-rel mégis hogyan gondolod, hogy mérsz bármit is, ami 50 MHz?

Már ilyen jó kis Shannon törvényeket nem is említve.
(#) sikolymester válasza szdani hozzászólására (») Márc 5, 2012 /
 
Az AVR portjai memóriacímzéssel érhetők el. A portok 8 bitenként vannak felosztva, lévén egy 8 bites AVR 8 bites ugye.

Nos, szal fogod a címét, ami megfelelő header beillesztése után általában ilyesmi pl. : PORTA
Nos a PORTA 8 bites, tehát AVR zsargonban egy uint8_t típus.

Megcsinálod a megfelelő bitenkénti műveletet ezzel a PORTA változóval, ami valahol egy memóriacímbe mutat. És az AVR fizikai lábai tükrözni fogják ezt az állapotot.

Nem kell aggódni, a PORTA nem egy mutató, tehát úgy kezeld, mintha csak egy változó lenne.

Előtte persze ne feledd el konfigolni a lábakat, hogy kimenet, vagy bemenet legyen. Jelen esetben ezt a DDRDA változóval teheted meg. Vedd elő az adatlapot, hogy a DDRDA-t miként kell beállítani kimenetre.
(#) Suncorgo válasza sikolymester hozzászólására (») Márc 5, 2012 /
 
A timer léptetésével. A timert külső órajel forrásról nagyobb frekvenciákkal lehet léptetni a számlálót.

Itt egy példa PIC-el: 50Mhz freq counter

és ez pedig csak 4Mhz-en megy
(#) Suncorgo válasza sikolymester hozzászólására (») Márc 5, 2012 /
 
Itt van még 1: Bővebben: Link

Ez is csak 4Mhz-en megy, de itt a 2 db kaszkádosított 74hc590 bináris számláló osztja az órajelet.
(#) sikolymester válasza Suncorgo hozzászólására (») Márc 5, 2012 /
 
Ejjha, nem rossz elv.
Megnéztem nagy hirtelenséggel az Atmega16-ot. Nos abban sajnos nincsen aszinkron külső órajel mintavételezés (lád a csatolt képet). De úgy gondolom, hogyha találsz olyan típust, amiben van ilyen, akkor az elv amit írtál működőképes lehet.

Persze más tészta, hogyha te is külső számlálóval csökkented az órajelet.

Atmega16.jpg
    
(#) zombee válasza Suncorgo hozzászólására (») Márc 5, 2012 /
 
AVR-nél a portok bemenetei az órajellel vannak szinkronizálva, azaz a legnagyobb mérhető freki
az AVR órajelének fele, ahogy Shannon is megmondta a maga idejében...

A nagyobb frekiknél osztót szokás használni. Az interruptolás nem praktikus, helyette valamelyik timer
bemenetére(T0, T1, T2) kell kötni és azt beállítani úgy hogy a Tn bemenetről menjen.
Interruptot a számláló túlcsordulására(OVFn) kell írni, mert ha le is osztod, az még túlcsordulhat!

Ezzel párhuzamosan egy másik timert is beállítasz valami fix frekire, én 320ms-ot tartom praktikusnak
mivel a legtöbb ember a sűrűbb váltogatást(pl. 250ms) már nem képes valós időben értelmezni,
ennél ritkább(pl. 500ms) mérésidő pedig türelmetlenné teheti.

Én pedig a harmadik timert is munkára fognám, mert kis frekiknél bizony pontatlan lehet ha leosztod!
Illetve az ICP1-re is rákötném mert nagyon kis frekiknél már impulzusidőt kell mérni, nem impulzusszámot!
(#) zombee válasza sikolymester hozzászólására (») Márc 5, 2012 /
 
Idézet:
„Megnéztem nagy hirtelenséggel (...) abban sajnos nincsen aszinkron külső órajel”

Hát ez valóban nagy hirtelenséggel lehetett ha nem jutottál el idáig:
8-bit Timer/Counter2 with PWM and Asynchronous Operation

Ez nem tudom hogy mit jelent, azt olvasom hogy 32kHz-es kristályra találták ki de lehet hogy egy ilyen kéne?
(#) sikolymester válasza zombee hozzászólására (») Márc 5, 2012 /
 
Azért alaposan néztem meg, nem kell aggódni.
Az rendben van, hogy aszinkron működik, de csak kvarcról. Legalábbis az adatlap erősen javasolja. Külső órajel mérése ezzel kizárva.

Ráadásul, hogyha 32kHz-re van optimalizálva, akkor azt hiszem nem lehetne pontos működést feltételezni egy 50MHz-es jelről, már ha egyáltalán menne.
(#) Reggie válasza Mezoas hozzászólására (») Márc 5, 2012 /
 
Itt van egy firmware, neked csak az FPGA-t kell kihagyni.
(#) Reggie válasza Suncorgo hozzászólására (») Márc 5, 2012 /
 
Attol fugg milyen pontosan szeretnel merni:
- leosztod a bemeno jel frekvenciajat
- raksz melle egy CPLD-t
- kulso szamlaloval kiegeszited
(#) Suncorgo válasza zombee hozzászólására (») Márc 5, 2012 /
 
Azt az aszinkron bemenetet 32768hz-es kavicsnak találták ki. Osztva pontosan 1hz lehet kapni, amiből van egy órád.
(#) Suncorgo válasza Reggie hozzászólására (») Márc 5, 2012 /
 
Arra gondoltam akkor hogy 74ac161-el építek egy számlálót és ez elvileg adatlap szerint 125Mhz-ig képes számolni. Az már több is a kelleténél.

Most már csak annyi van hátra, hogy úgy kitalálni az egészet hogy egy meg8-as lábszáma elég legyen.

Időalapnak használok megszakítást, ez majd letiltja a számlálókat hogy ne számoljon tovább és 1 porton multiplexelve olvasom le a számlálók értékeit.
(#) sikolymester válasza Suncorgo hozzászólására (») Márc 5, 2012 /
 
De ha már külső órajelosztót használsz, akkor tekints rá az Input Capture Unit-ra. Pont arra találták ki, amit te akarsz csinálni.
Az interruptjából szépen etetsz egy ringbuffert, azt meg feldolgozod, ahogyan csak akarod.
(#) zombee válasza Suncorgo hozzászólására (») Márc 5, 2012 /
 
Ha nem elég a láb akkor használj shift regisztert(74HC165) vagy portbővítőt(PCF8574).
(#) Suncorgo válasza sikolymester hozzászólására (») Márc 5, 2012 /
 
Ezt az input capture unitot kifejtenéd bővebben? Még sosem használtam.
(#) Suncorgo válasza zombee hozzászólására (») Márc 5, 2012 /
 
Tényleg

Valahogy meg kell pedig oldani a 9 digitet.
(#) Massawa válasza Suncorgo hozzászólására (») Márc 5, 2012 /
 
Ha nagyon érdekel, van két 8 számjegyes gyári frekiméröm. Mind a kettö megy akkurol. Az egyik 40MHz-ig a másik 100-ig. Egy ilyennel korábban célba érsz. Az egyiktöl meg tudok szabadulni....
Következő: »»   420 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem