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   543 / 840
(#) TavIR-AVR válasza mrd86 hozzászólására (») Jún 19, 2013 /
 
Lehet hogy szétprogramoztad a kísérletezéssel a chipet, miközben írtál a tápnélkül rá
Segédórajel - 10% esély a működésre .
(#) mrd86 válasza TavIR-AVR hozzászólására (») Jún 19, 2013 /
 
Ez a legelső próbálkozásom még nem voltam tisztában a fuse bitekkel és már régen csináltam. Megpróbálom hátha köszönöm mindent
(#) csabeszq válasza zombee hozzászólására (») Jún 19, 2013 /
 
SPI-t akarok hajtani AVR-rel (CD4021B shift regiszter), az pedig gázos, mert programozásnál le kell választani az eszközökt, hogy a MISO-t ne piszkálja. Sajnálatomra ez a chip nem is tristate.
(#) zombee válasza csabeszq hozzászólására (») Jún 19, 2013 /
 
Ellenállást teszel a shift regiszter kimenetére. Mondjuk 10 k Ohm, ezt a programozók bőven tolerálják,
és még elég "kicsi" ahhoz hogy a bemenő kapacitás ellen hasson.
A hozzászólás módosítva: Jún 19, 2013
(#) hygy hozzászólása Jún 20, 2013 /
 
Hello!

Szóval arduinohoz próbálgattam a kapacitás mérő libet. És nagyjából műxik. Proximity érékelőt akarok építeni.

Kérdés, ha pl fogok egy papír dobozt amibe mondjuk (csak a példa kedvééért) mondjuk degukat rakok. A papírdoboz sarkain körbe vezetem a drótot, akkor:
- egyrészt elvileg ha a papír dobozhoz 20cm-re egy kéz közelít vagy pl. egy macska akkor azt lehet e így érzékelni?
- másrészt ha belül mozognak a deguk a dobozban, attól változik e a kapacitás lényegesen? (szóval meg tudom e különböztetni a mozgást ami belül történik és a mozgást ami kívülről jön.)

Próbáltam egy darab drótot rálógatni a kapacitás mérőre, a notebookba dugott arduinóval kb ilyen 1 méterről is tudtam már érzékelni a drót fölé rakott kezem. Viszont ha külön adok az arduinónak egy akkumlátorról tápot, akkor e a táv nagyon durván lecsökken. Gondolom, mivel a notebookos táplálás esetén maga a födém vagy ilyesmi lehet a másik fegyverzete a kondinak.

Öttlet, hogy papír dobozzal + drótokkal hogy tudnám az érzékenységet megnövelni?
(#) tecsa hozzászólása Jún 20, 2013 /
 
Sziasztok!

Mikro kontroller választáshoz szeretnék segítséget kérni. Nem lenne hatalmas feladata az eszköznek USART-on fogadna a számítógéptől adatot. Kettő byte határoz meg egy adatot, úgy gondolom, hogy ekkora telegramban már átvihető az információ. Ha nagyon rizikós akkor talán 1byte is elég lehet a telegramnak. Ezt az információt feldolgozás utána kéne megjeleníteni összesen 4db 7szegmenses kijelző egyikén vagy ledeken (8-12db)

Milyen kontrollert ajánlotok ami ezt a feladatot ellátja?

Segítségeteket előre is köszönöm. Tecsa
A hozzászólás módosítva: Jún 20, 2013
(#) zombee válasza tecsa hozzászólására (») Jún 20, 2013 /
 
Szerintem ATMega8 lesz. ATTiny2313-al is mehetne, de akkor alig marad szabad port a kommunikációra és egyéb cuccokra ha még bővítenéd. És nem utolsósorban, a mega8 u.olyan olcsó.
(#) tecsa válasza zombee hozzászólására (») Jún 20, 2013 /
 
Fejlesztés nem hiszem, hogy lesz. Maximum számítógép oldalról, a hardver nem fog módosulni. Esetleg ha SPI-t használok pár 74HC595el akkor lehetne azért sok portot spórolni egy Attiny 2313 esetén. Ez járható út lenne? Így lehetne esetleg kisebb kontrollert használni? Bár inkább olcsó legyen mint kicsi.
A hozzászólás módosítva: Jún 20, 2013
(#) zombee válasza tecsa hozzászólására (») Jún 20, 2013 /
 
Ha több "kis" IC-t hasnálsz az lehet bármilyen, de olcsóbb biztosan nem. (és kicsi sem) Ne feledd, hogy az extra összeköttetések és a programban való lekezelés miatt nem túl optimális így bővíteni. A shift regiszter kezelés, a kijelző időzítése, plusz az UART együttes kezelése, megspékelve egy kis számolással komoly gyakorlatot igényel, aminek még hobbiból sem kéne nekiállni. Most lehet hogy nagyképűnek hangzik, de én így is hamar megoldanám. Csak nem látom értelmét. Az ATMega8 pedig már-már olcsóbb mint a 2313, és 5-el több szabad portlába van. Ha csak a kijelzőt nézzük, az 12 láb, az UART 2, a kristály 2, és ne feledd hogy a programozólábakkal(MOSI-MISO-SCK) nem illik LED-eket hajtani. Ha mega8-at használsz akkor ezeket szabadon hagyhatod...
A hozzászólás módosítva: Jún 20, 2013
(#) tecsa válasza zombee hozzászólására (») Jún 20, 2013 /
 
Na ez az oka annak, hogy véleményt kértem! Köszönöm szépen akkor maradok az atmega 8nál az van is otthon egy pár darab. Nagy számolás nem lesz, annyi lesz a dolog, hogy a távirat egy része hordozza azt az információt, hogy hova kell kiíratni, a maradék része pedig az adatot tartalmazza. Kis gondolkodás után már tudom, hogy 1byte-on is el fog férni a telegram. (nem is tudnám hogyan kéne dolgozni 2byte-al, a 8bit lényegesen egyszerűbbnek tűnik)
A hozzászólás módosítva: Jún 20, 2013
(#) csabeszq válasza zombee hozzászólására (») Jún 21, 2013 /
 
Érdemes mega IC-ket használni, mert sokat tudnak hardverből, amire nem kell programot írnod.

Shift regisztert én is használok portbővítésre, 74HC595 és CD4021-et. Az SPI MISO/MOSI/SCK lábaira lesznek kötve.

Ezzel a megoldással 1MHz-cel tudom beletolni az adatokat (16 MHz kristály) és ugyanabban a körben kiolvasni őket. Néhány órajelciklus alatt 4 shift regisztert írok és 2-t olvasok.
(#) mrd86 hozzászólása Jún 21, 2013 /
 
Újabb kérdéssel fordulok hozzátok mélyen tisztelt fórumtársaim. Miért van az hogy megépítettem egy doper tökéletesen tudok vele programozni és építettem egy usbasp-t és azzal nem tudom programozni mert nem látja a cél drivert. A programozóval lehet a baj mert szerintem igen de nem tudom mi windows tökéletesen felismeri feltelepíti Arduino1.0.4 látja programozni is tudna vele de nem látja a chipet.

Az usbasp http://www.fischl.de/usbasp/

Dugdosós próbapanelon összerakva. minden a helyén vezetékileg program beleégetve a mega-ba.
A hozzászólás módosítva: Jún 21, 2013
(#) mrd86 válasza mrd86 hozzászólására (») Jún 21, 2013 /
 
Megoldódott én voltam a "balga". Slow SCK Jumper nem volt fenn, és 1Mhz belső RC-t haszáltam az pedig kisebb mint 1,5 Mhz ha jól számolom.
(#) johny999 hozzászólása Jún 25, 2013 /
 
Sziasztok,

ATTINY45-el szeretnék 20kHz-es, 50%-os kitöltési tényezővel rendelkező PWM négyszögjelet generálni. Tudna valaki segíteni hogy ezt hogyan lehet megoldani?
Kezdő vagyok a témában :/

Előre is köszönöm.
(#) kapu48 válasza johny999 hozzászólására (») Jún 26, 2013 /
 
Milyen nyelven tudsz programozni?
Van az egyszerűbb Bascom, vagy a GCC Atmel Studio.
(#) csabeszq válasza johny999 hozzászólására (») Jún 26, 2013 /
 
Lehetőleg hardverből oldd meg. Mármint, hogy a szükséges regisztereket felprogramozod, aminek köszönhetően 20 kHz 50%-os jel jön ki az egyik lábon.

Olvass utána a timereknek, a PWM-nek,....

Programozni jóformán semmit sem kell a regiszterek beállításán kívül.
A hozzászólás módosítva: Jún 26, 2013
(#) H2opok hozzászólása Jún 26, 2013 /
 
Üdv
Egy kis segitség kellene.
Van egy gyári nyáktervem, ami egy 16x16 ledes matrix vezérlő. Atmega8 al, rtc el,stb. Forrás program is van hozzá. A programot kellene megnézni, - vagy nem is tudom mit- hogy milyen ledpanelt kellene hozzá tervezni. Elvileg egy 10x11 es led panelt vezérel, a program szerint. Ha valaki tudna ebben segiteni,elküldeném az állományokat mailben.
Pü. Ben kérnék visszajelzést.
Előre is köszi.
(#) johny999 válasza kapu48 hozzászólására (») Jún 26, 2013 /
 
C/C++ WinAVR. :/
(#) kapu48 válasza johny999 hozzászólására (») Jún 26, 2013 /
 
(Hogy ne menjünk messzire!)
A PWM 1 magyarázata:
Bővebben: Link
(#) johny999 válasza kapu48 hozzászólására (») Jún 26, 2013 /
 
Akkor, CTC mód nekem elvileg jó.

TCCR0A -> WGM02:0 WGM01:1 WGM00:0
TCCR0B -> ezt még nem teljesen értem. Az a prescaler az az N a képletben ami alapján megkapom a frekvenciát?

fOCxn = fclk_I/O / 2*N*(1+OCRnx)

És ugyanígy ebből a képletből számolom ki az OCR0A-t?

Eddig jutottam :/

  1. #define F_CPU 8000000
  2.  
  3. #include <avr/io.h>
  4.  
  5. int main(void)
  6. {
  7.         DDRB |= 1 << PINB0;
  8.        
  9.         TCCR0A |= (0 << WGM02) | (1 << WGM01) | (0 << WGM00);
  10.         TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00);
  11.        
  12.         OCR0A =
  13.        
  14.  
  15. }
A hozzászólás módosítva: Jún 26, 2013
(#) csabeszq válasza johny999 hozzászólására (») Jún 26, 2013 /
 
Ismétlés helyett itt a link:

Röviden: OCR0B-val a kitöltési tényezőt szabályozhatod, OCR0A-vel meg hogy meddig számoljon el (fast PWM mód).

1 MHz / 20 kHz = 50. Ez még belefér a 256-os timerbe, tehát nem kell prescaler. 16 MHz-nél már kelleni fog.

OCR0B = 25
OCR0A = 50

ez lesz az 50%-os PWM. A többi regisztert a link alapján kell beállítani (ott 64-es prescaler van, azt is írd át).
A hozzászólás módosítva: Jún 26, 2013
(#) johny999 válasza csabeszq hozzászólására (») Jún 26, 2013 /
 
Köszi.

Ha prescalert használok akkor hogyan módosul a képlet? Mert a datasheetben ez van fast PWMnél (kép)

fast pwm.JPG
    
(#) csabeszq válasza johny999 hozzászólására (») Jún 26, 2013 /
 
A prescaler a timer sebességét osztja 1 / 8 / 64 /... értékekkel.

Ha a példádnál maradva 8 MHz-en futsz,

8 MHz / 20 kHz = 400

Ezt nem tudod beállítani, mert túl nagy. Ezért definiálsz egy 8-as prescalert (ennyivel lassítod a timert).

8 MHz / 8 / 20 kHz = 50

Végeredmény: ugyanaz, mint fentebb (25/50), leszámítva a prescalert, ami (1 << CS01) lesz (1 << CS00) helyett.
(#) johny999 válasza csabeszq hozzászólására (») Jún 26, 2013 /
 
Értem. Akkor ennek elvileg működnie kellene. (50Hz-re állítva, 8MHz internal clock, 1024 prescaler, egy led van a PB0 porton) De mégsem megy :/ Abban a while ciklusban nem vagyok biztos hogy úgy kell lennie ahogy most van.

  1. int main(void)
  2. {
  3.         DDRB |= 1 << PINB0;
  4.        
  5.         TCCR0A |= (1 << WGM01) | (1 << WGM00);
  6.         TCCR0B |= (1 << WGM02) | (1 << CS02)| (1 << CS00);
  7.        
  8.         while(1) {     
  9.                 OCR0A = 156;
  10.                 OCR0B = 78;
  11.         }
  12. }
A hozzászólás módosítva: Jún 26, 2013
(#) csabeszq válasza johny999 hozzászólására (») Jún 26, 2013 /
 
A timer nemcsak PWM-ként üzemelhet. Ha PWM-et akarsz, azt engedélyezni kell a kimeneteken.

Olvass utána a TCCR0A regiszter COM0A0,COM0A1,COM0B0,COM0B1 bitek jelentésének (fast PWM mód).
A hozzászólás módosítva: Jún 26, 2013
(#) aszika hozzászólása Jún 26, 2013 /
 
Pénteken vizsgázok Számítógépes Architektúrából ami nem igazán áll közel a szívemhez. A 2. feladatnál el vagyok veszve. A csoport B csoport C csoport Tudnátok segíteni?
A hozzászólás módosítva: Jún 26, 2013
(#) röntgen válasza aszika hozzászólására (») Jún 26, 2013 /
 
Hova jársz egyébként? Ezt legalább egy kicsit érteni kellene.
(#) aszika válasza röntgen hozzászólására (») Jún 26, 2013 /
 
Debreceni Egyetem. A kapcsolási rajzig semmi problémám inkább a programozás része nem megy :/
(#) röntgen válasza aszika hozzászólására (») Jún 26, 2013 /
 
PM ment
(#) johny999 válasza csabeszq hozzászólására (») Jún 26, 2013 /
 
Mégiscsak inkább a Clear Timer on Compare Match (CTC) módnál maradtam. Itt fix az 50%-os duty cycle, csak a frekvencia változik. Nekem pont ez kell. (20kHz-60kHz között szeretném változtatni a frekvenciát kb, másodpercenként 500Hz-es ugrásokkal)

  1. int main(void)
  2. {
  3.         DDRB |= 1 << PINB0;             //Set pin PB0 as output
  4.        
  5.         TCCR0A |= (1 << COM0A0) | (1 << WGM01);
  6.         TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00);
  7.        
  8.         TCNT0 = 0x00;
  9.        
  10.         OCR0A = 4.12;
  11.         OCR0B = 0x00;
  12. }


Azt meg lehet valahogy oldani hogy az OCR0A értéke 1 másodpercenként változzon meg? Az értéket pld. egy tömbből olvasná ki. {4,12; 4,248; 4,376; 4,504; 4,632; 4,76; 4,888; 5,016}
A hozzászólás módosítva: Jún 26, 2013
Következő: »»   543 / 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