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   91 / 840
(#) fecus hozzászólása Jan 6, 2009 /
 
Egy kis elméleti segítség kellene. Hol találok olyan magyar leírást, ami ismerteti az Attiny45 pwm módjait? Ha jól értem 4 mód van fast, phase correct, "normál" és valami ahol a freki nem állandó (CTC módban?). Szóval olvasom, kissé értem is, csak nem látom át melyik mire jó. Pl. hangra melyiket kell felhúzni? Tudom van több példaprogi a Net-en, csak nem szeretem ész nélkül másolni.
(#) Topi válasza fecus hozzászólására (») Jan 6, 2009 /
 
Az oldalon csak szét kell nézni.

Bővebben: Link
(#) kavkar hozzászólása Jan 6, 2009 /
 
Üdv.
Minap beruháztam egy alfanumerikus lcd kijelzőre, amint az lenni szokott nem működött elsőre, se másodikra, és most már sokadjára sem, így gyakoratilag kifogytam az ötletekből.. Csatolom a .c-met hátha valaki tud segíteni.
4 bites módban van bekötve, a nem használt adatlábak le vannak húzva földre(az rw is), kontrasztot trimmeren át tudom szabályozni, de nem segít.. Nekem úgy tűnik 2 soros módba se lép be, mert csakorlatilag mikor ráadom a feszt semmi sem történik...

a.c
    
(#) vegyészmérnök válasza kavkar hozzászólására (») Jan 6, 2009 /
 
A rw miért van földre húzva? Ha azt nem használod, akkor nem csoda hogy nem működik...
(#) szilva válasza vegyészmérnök hozzászólására (») Jan 6, 2009 /
 
Annak úgy mennie kell. Én sem szoktam az rw-t vezérelni, felesleges lábpazarlás.
(#) kiborg válasza kavkar hozzászólására (») Jan 7, 2009 /
 
Hali!

Csatolom a saját inic fájlomat, igaz asm, de hátha segít.
Nekem műxik.

ui: használok mellette még egy wait-ot is.
( a wait1ms meghívása annyi ms várakozás, amennyi az előtte levő temp változóba betöltök)

üdv Kiborg

lcd_inic.inc
    
(#) killbill válasza kavkar hozzászólására (») Jan 7, 2009 /
 
Hello!

Ha nem használod a WR-ot, akkor leföldelheted, ezzel nincs semmi baj.

A HD44780 leírása szerint 4 bites adatbuszhoz az inicializálásban háromszor ki kell küldeni, hogy 3, aztán jöhet csak a 2, és csak utána a tényleges init dolgok. Felteszek neked ide egy forrás részletet. Ez egy müködő készülék programjából származik. ATmega128, linux, gcc.
(#) kiborg hozzászólása Jan 7, 2009 /
 
Üdv mindenkinek!

Topinak címezném a kérdést, mert 433MHZ kommunikációról lenne szó.

Felállás a következő:
Egy mega16 ami soros porton kapja az adatot (1byte), felbontja manchaster kódban, majd kiküldi a soros porton, ahova kötve van az adó modul.

Vevő egy mega16 szintén.
A legnagyobb problémám az, hogy szinte folyamatosan van vétel.
Kiküszöbölendően írtam egy rutint, ami kiszűri az olyan bytokat, amik nem manchaster kódban jöttek.
Ha egymás után jön két kód,ami mancaster kódban van, akkor azt visszakódolja rendes karkterré, majd kiküldi az lcd kijelzőre.
De elég vacakul működik.csak kb minden 10-20 karaktert viszi át, de sokszor azt is hibásan
Olyan, mintha szedne össze valami zajt, majd hirtelen folytatja a vételt manchaster kódban, és így mivel a byte eleje véletlen jellegű (bár manchaster kódú) ezért értelmetlen az átvitt információ.

Szóval mit lehetne itt kezdeni ?

Köszi Kiborg
(#) kiborg válasza kiborg hozzászólására (») Jan 7, 2009 /
 
Kiegészítés:
ha csak annyit csinálok a vevővel, hogy a RX bemenetet átteszem egy kimenetre, akkor a LED szinte folyamatosan világít.
Lehetséges hogy ez zavarja össze vissza a kommunikációmat ?

Kiborg
(#) kavkar válasza kiborg hozzászólására (») Jan 7, 2009 /
 
Köszönöm a válaszokat, amint tudom ki fogom próbálni a javasatokat.

Én is szórakoztam ezzel a vevővel, és azt tapasztaltam hogy nagyon kényes a táp-jára. Pl mikor csak simán a számítógép usb-jéről próbáltam megtáplálni akkor nekem is összevissza villgott, utána találtam egy 5v-os tápot azzal meg tökéletesen megy..
Nem tudom hogy neked miről megy, de esetleg lehet h ilyesmi..
(#) Topi válasza kiborg hozzászólására (») Jan 7, 2009 /
 
Igen, előfordul hogy állandó jel van. A Vevő moduloknak szokott lenni analóg kimenete, ahol a burkológörbét, vagy magát a még demodulálatlan jelet vezetik ki.

Keress analóg kimenetet és nézd meg szkóppal. Azt még tartsd szemelőtt, hogy ha nem megfelelőek az antennák (azt hiszem a negyedhullám 17,3 cm) akkor messze rosszabb a vétel. Továbbá, ugyan nem vagyok rádiós szakember, de ez elektronikai tény inkább, hogy sem a hoszabb, sem a rövidebb antenna nem jó. A hoszabb antennánál előfordul, hogy saját jelét oltja ki.

Ha az antenna rendben van, akkor szépen, nem csak nF-os hanem pF-os kondikkal is szűrni kell a vevőt. Ezekután a nyákot is úgy kell kiépíteni, hogy legyen GND Fill.
Ha még így sem jó, akkor marad a jól bevált módszer: Horganyzott lemezből kisdoboz készítés, korrektül méretezett coax-on jel-be.

Amúgy az ilyen egybe modulok nagyon kényesek a föld jelenlétére. Csakis földfüggetlen labortápegységről (vagy elemről) üzemeltesd. Ilyen kis dugasztápok vagy mit tudom én mik, szóba sem jönnek.

De mindenek előtt, keresd meg az analóg kimenetét a vevőnek és nézz rá szkóppal. Esetleg küld képet a hullámformáról.
(#) kavkar válasza kavkar hozzászólására (») Jan 7, 2009 /
 
(Nah meg lett a válasz a kérdésemre: életem első atmega16-osának PORTC-je a kísérletezéseim áldozatául esett; jobb létre szenderült
(#) huba válasza kavkar hozzászólására (») Jan 7, 2009 /
 
Az ATmega16-nak úgy tudom van JTAG-ja ami a port.c-t használja. Nincs véletlenül bekapcsolva biztositébitektöl? Mert ha igen az a ludas.
(#) kavkar válasza huba hozzászólására (») Jan 7, 2009 /
 
Valóban a be volt kapcsolva, kinyomtam, úgy néz ki hogy ez volt a baj.
Köszönöm.
(#) vzoole hozzászólása Jan 8, 2009 /
 
Sziasztok!

Egy kis (lehet nagy) segítség kéne megszakítás ügyben.

Alapgondolat, hogy energiatakarékos módon szeretnék gomblenyomást figyelni.
A program csak elméleti... gomb lenyomásakor felvillant egy LED-et. ATTiny45 procival.

Már elég sokfelé keresgéltem a megoldás, sokféleképpen kipróbáltam, de nem működik.
Sajnos még sok minden nem világos AVR-ékné.

Maga a program:

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #include <avr/interrupt.h>
  4. #include <avr/sleep.h>
  5.  
  6. #define LED_ON()                PORTB = PORTB | (1<<PINB0);
  7. #define LED_OFF()               PORTB = PORTB & ~(1<<PINB0);
  8.  
  9. //-------------------------------------
  10. void beallitasok(void) {
  11. //-------------------------------------
  12.        
  13.         // PORT B beállítása
  14.         // Bemenet: PB4: +5 voltra felhúzva, nyomógombbal testre kötve
  15.         // Kimenet: PB0: LED
  16.         // Kimenet: PB1, PB2, PB3, PB5
  17.         // bin   543210
  18.         //       ||||||
  19.         DDRB = 0b101111;
  20.        
  21.         // Pin4 beállítása megszkítás érzékelésére
  22.         PCMSK |= (1<<PCINT4);
  23.        
  24.         // MCUCR beállítása (ISC01-ISC00)
  25.         // 0-0 Az INTO alacsiny szintje megszakíráskérést hoz létre
  26.         // 0-1 Az INTO bármilyen logikai változása megszakíráskérést hoz létre
  27.         // 1-0 Az INTO lefutó impulzusa megszakíráskérést hoz létre
  28.         // 1-1 Az INTO felfutó impulzusa megszakíráskérést hoz létre
  29.         MCUCR = (1<<ISC01) | (1<<ISC00);
  30.  
  31.         // turn on interrupts! = megszakítás bekapcsolása!
  32.         // Na ezt nem tudom mi, valahol láttam és hibát se ad rá, így bentmaradt
  33.         GIMSK  |= (1<<INT0);
  34.        
  35.         // Interrupt bekapcsolása
  36.         sei();
  37. }// beallitasok
  38.  
  39. // Elméletileg ez futna le megszakításkor (ha jól értelmeztem a dolgokat)
  40. ISR(PCINT0_vect) {
  41.         LED_ON();               //LED bekapcsolás
  42.         _delay_ms(500); //Kicsit világítson is
  43.         LED_OFF();              //LED kikapcsolás
  44. }// ISR
  45.  
  46. //-------------------------------------
  47. int main(void) {
  48. //-------------------------------------
  49.         beallitasok();
  50.         for(;;) {
  51.                 sleep_mode();
  52.         }// for
  53. }// main


A fordítás hibaüzenet nélkül lefut.

Valaki hozzáértőt megkérnék hogy rakjon rendet a fejembe.

Kapcsolódó linkek:
http://webhome.csc.uvic.ca
http://www.avrfreaks.net
http://www.arduino.cc
http://www.cs.mun.ca
http://www.avrfreaks.net
http://www.windmeadow.com
http://www.nongnu.org

Üdv.
Zoli
(#) vzoole válasza vzoole hozzászólására (») Jan 8, 2009 /
 
Valamiért a kód lemaradt...

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #include <avr/interrupt.h>
  4. #include <avr/sleep.h>
  5.  
  6. #define LED_ON()                PORTB = PORTB | (1<<PINB0);
  7. #define LED_OFF()               PORTB = PORTB & ~(1<<PINB0);
  8.  
  9. //-------------------------------------
  10. void beallitasok(void) {
  11. //-------------------------------------
  12.        
  13.     // PORT B beállítása
  14.     // Bemenet: PB4: +5 voltra felhúzva, nyomógombbal testre kötve
  15.     // Kimenet: PB0: LED
  16.     // Kimenet: PB1, PB2, PB3, PB5
  17.     // bin   543210
  18.     //       ||||||
  19.     DDRB = 0b101111;
  20.        
  21.     // Pin4 beállítása megszkítás érzékelésére
  22.     PCMSK |= (1<<PCINT4);
  23.        
  24.     // MCUCR beállítása (ISC01-ISC00)
  25.     // 0-0 Az INTO alacsiny szintje megszakíráskérést hoz létre
  26.     // 0-1 Az INTO bármilyen logikai változása megszakíráskérést hoz létre
  27.     // 1-0 Az INTO lefutó impulzusa megszakíráskérést hoz létre
  28.     // 1-1 Az INTO felfutó impulzusa megszakíráskérést hoz létre
  29.     MCUCR = (1<<ISC01) | (1<<ISC00);
  30.  
  31.     // turn on interrupts! = megszakítás bekapcsolása!
  32.     // Na ezt nem tudom mi, valahol láttam és hibát se ad rá, így bentmaradt
  33.     GIMSK  |= (1<<INT0);
  34.        
  35.     // Interrupt bekapcsolása
  36.     sei();
  37. }// beallitasok
  38.  
  39. // Elméletileg ez futna le megszakításkor (ha jól értelmeztem a dolgokat)
  40. ISR(PCINT0_vect) {
  41.     LED_ON();           //LED bekapcsolás
  42.     _delay_ms(500);     //Kicsit világítson is
  43.     LED_OFF();          //LED kikapcsolás
  44. }// ISR
  45.  
  46. //-------------------------------------
  47. int main(void) {
  48. //-------------------------------------
  49.     beallitasok();
  50.     for(;;) {
  51.         sleep_mode();
  52.     }// for
  53. }// main
(#) vzoole válasza vzoole hozzászólására (») Jan 8, 2009 /
 
Na feladom...
Beszurom képként
(#) Lucifer válasza vzoole hozzászólására (») Jan 8, 2009 /
 
Szerintem kevered a port change (PCINT0..5) változását és az INT0-t figyelő megszakításokat.

A
  1. GIMSK  |= (1<<INT0);

cseréld le:
  1. GIMSK  |= (1<<PCIE);

illetve a
  1. MCUCR = (1<<ISC01) | (1<<ISC00);

nem kell.
(#) fecus válasza Topi hozzászólására (») Jan 8, 2009 /
 
Köszi. Ebben a fast pwm-et használod ha jól látom. Sajnos C-ben nem vagyok jó, de ki lehet bogarászni.
(#) vzoole válasza Lucifer hozzászólására (») Jan 9, 2009 /
 
Köszönöm, így működik.

Átnéztem az adatlapot megint, most hogy tudtam a megoldást már érthetőbb volt.

Viszont PCINT-nél nem tudok "hardveresen" felfutó, lefutó élt megkülönböztetni?!
Ami jól jött volna, így azt szotveresen kell megcsinálni?!

Ja és hogy kell hosszabb kódot beszurni rendesen?

(code) (/code) ezzel próbáltam de lemaradt a nagy része (persz szögletes zárójellel)

(#) szilva válasza vzoole hozzászólására (») Jan 9, 2009 /
 
A kezdő tag-be bele kell írni, hogy asm vagy c szintaxisú-e a kód, azaz (code=c) vagy (code=asm) kell, természetesen szögletes zárójelekkel.
(#) Shoo hozzászólása Jan 9, 2009 /
 
Hali!
Nekem egy olyan kérdésem lenne, hogy ha sample-t rendelek, akkor hova hozzák? Gondolom nem küldik házhoz... talán az MSCBP-hez (ugy tudom ők a Mo-i forgalmazók) Olyan avr kellene, amit nem találtam Mo-n és talán küldenek belőle sample-t.
(#) Dudus válasza Shoo hozzászólására (») Jan 9, 2009 /
 
Nem küldenek Sample-t! Max. kuncsoroghatsz a magyar disztribútoroknál!
(#) Topi válasza Shoo hozzászólására (») Jan 9, 2009 /
 
Ha megírod nekem mi kell, akkor beszélek a HEStore-osokkal. Sajnos az MSC nem sok mindent tart raktáron. HEStore-ba már én is feltetettem egy csomó AVR-t.

Megpróbálom elintézni!
(#) Dudus válasza Topi hozzászólására (») Jan 9, 2009 /
 
MSC nekem mindig nagyon korrekten elküldte amire szükségem volt. A raktárkészlet egy dolog. Megmondják az árat és beszerzik. Persze , gondolom, nem egy darabot, de én sem szoktam 20~30 darabnál többet rendelni.
(#) Topi válasza Dudus hozzászólására (») Jan 9, 2009 /
 
Nincs velük baj, ehhez kétség sem fér. Hát korrektebbek mint a ChipCAD.
(#) Shoo válasza Topi hozzászólására (») Jan 9, 2009 /
 
Ez lenne az: ATTINY861, LC mérőhöz kellett volna és ugy gondoltam, hogy jobban megérné avrrel, ha kapok belőle sample-t, de akkor asszem piccel fogom megcsinálni és akkor 1 darabért nem is kell fáradozniuk
Topinak: Kedden megyek Járműből vizsgázni és majd akkor megtudakolom a tanártól a dolgokat, ha még szükség van rá. Nem tudom, hogy Skoryval mit sikerült beszélned a fordulatszámméréssel kapcsolatban...
(#) Dudus válasza Shoo hozzászólására (») Jan 9, 2009 /
 
Egy ~700 Ft - os, beszerezhető IC - ből miért küldenének mintát ?
(#) Grebi hozzászólása Jan 9, 2009 /
 
Nah ismét egy jó kis AVR programozás kédés egy kezdőtől .Úgytettem ahhogy javasoltátok és félretéve a Pascal Delphi valamint PLC programozási tudásom, megtanultam C- ben programozni... Nah mármost, az én kérésem kiterjedne arra hogy valaki nem-e tud olyan irományt amiben megtalálom az AVR utasitáskészletét, #include behivásokat, nah meg az AVR-ben található függvényeket?
Ha idegen nyelvü az nembaj mert úgyahogy megértem a 3-as angol érettségimmel , deha van magyar akkor azt előnyben részesiteném
Ha valaki tud segite azt nagyon szépen megköszönöm és hálás leszek érte!!
(#) Norberto válasza Grebi hozzászólására (») Jan 9, 2009 /
 
Az assembly nyelvű utasításkészletet az AVRStudio Súgó menüjéből olvashatod ki, az AVR-ekhez használható C utasítások pedig az adott C-fordító információi között lelhetők fel.
Következő: »»   91 / 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