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   529 / 840
(#) pittosi válasza zombee hozzászólására (») Márc 31, 2013 /
 
Rá kattintasz a linkre , legörgeted a kijelzők alatt egy kis táblázat.
azt nem értem .
Meg azt hogy felprogramozom a AVR és nem csinál semmit Valamit nem pipáltam ki vag mi?
(#) vtnagy válasza pittosi hozzászólására (») Márc 31, 2013 /
 
Szia!

Jól értem, hogy a Fuse Bit-ekre gondolsz?
Előfordulhat, hogy azokat nem állítottad be megfelelően (lásd a kép). Az AVR adatlapjában benne vannak ezen biteknek a pontos leírása, hogy mit és mire lehet használni.
Esetleg egy képernyőképet tudsz csatolni, hogy Nálad mikre vannak a bitek állítva?
Ha a hardverben nincs hiba, és a programozás is sikeres volt, valószínűleg itt lesz a probléma.

Üdv
vtnagy
(#) pittosi válasza vtnagy hozzászólására (») Márc 31, 2013 /
 
Igen itt a bibi Mivel most ismerkedek az avr- ral .Ezt meg nem értem hol kell nekem ezt beállítani ?
(#) pittosi válasza vtnagy hozzászólására (») Márc 31, 2013 /
 
Az avr studio 4- ben nem találom ezeket Hol keressem?

23.png
    
(#) zombee válasza pittosi hozzászólására (») Márc 31, 2013 /
 
Megvan!

Őszinte leszek, az ábra hibás. Nem kicsit, nagyon. Még én sem igazodom el rajta pedig van tapasztalatom. Az egyes biteket a PonyProg-ban lehet egyenként külön-külön állítani.
AVR Studio-ban már néhányuk csoportba van szedve vagy magyarázat került mellé.

A SUT_CKSEL csoport a leglátványosabb, és (aki érti a dolgát annak) kényelmesebb is.
Ez a beállítás adja meg hogy milyen órajelről menjen az IC ezért nagyon nem mindegy mit kap ide!
DE: a képen látható beállítás hibás, mert "nem definiált érték" lesz amit nem szabad beállítani!

Ezért a leírásból kell kibogarászni hogy mégis mit akart a szerző.
Látható hogy a PB6-PB7 lábak(XTAL1-2) mezei portlábként használatosak, így biztosan belső
RC oszcillátorról fog menni. A kérdés csak az, hogy 1,4,8MHz közül melyik? Ezt keresd ki nekem!
Ilyenkor a CKOPT-ot nem is kell bellítani mert annak csak kristályos használat mellett van hatása.
A WDTON-t sem nagyon értem, hiszen watchdog-ot csak a legelvetemültebb cuccokban használnak.

Kicsit játszottam a SUT_CKSEL résznél, ahol a CKSEL-ek beállítása biztosan 1MHz-et jelent.
Ezért ezt állítsd itt be: "Int. RC Osc. 1 MHz; Start-up time: 6 CK + 0 ms"
BODEN: bekapcsol, BODLEVEL: 2.7V
CKOPT: bekapcsol
EESAVE: bekapcsol
WDTON: bekapcsol, de ha újraindulgat akkor kapcsold ki!
SPIEN, RSTDISBL: nem piszka!

EEPROM tartalom:
Valószínűleg ilyen is lesz, és be kell égetn(eep fájl), máskülönben nem fog menni.
Ugyanúgy kell beégetni mint a FLASH-t, csak eggyel lejjebb.
A hozzászólás módosítva: Márc 31, 2013
(#) Dokikaa válasza zombee hozzászólására (») Márc 31, 2013 /
 
Értem. Letudnád írni, hogy hogyan tudom beállítani? Mert a programozásra extreme burnert használok, ott pedig a high fuse bithez D9 van (ami elvileg a külső oszcillátorra állítja be a dolgokat), a lowhoz E1.

Előre is köszönöm.
(#) pittosi válasza zombee hozzászólására (») Márc 31, 2013 /
 
eeprom tartalomnál akadtam el eep fájl az nem találom sehol
avrt
nekem a STH-10 kel l
a link alján ott van minden ,nem tudom mi kéne még hozzá ?

SHT-10.hex
    
(#) zombee válasza Dokikaa hozzászólására (») Márc 31, 2013 /
 
A low állítja az órajelet, nem a high. Az E1 a gyári, 1MHz-es beállítást (is) hordozza. Tipp:
Nyiss egy AVR Studio-t, a CON gombnál ne eszközt válassz hanem "Disconnected mode"-t, válassz IC-t a Main fülön, a Fuses fülnél meg állítgass be szépen mindent és alul hex-ben adja a beállítást.
Fontos: RSTDISBL nem pipa(1-es állapot), SPIEN pipa(0-ás állapot).
A hozzászólás módosítva: Márc 31, 2013
(#) zombee válasza pittosi hozzászólására (») Márc 31, 2013 /
 
Valóban nincs EEPROM fájl, csak FLASH. De abból kettő is!
Sajnos nem tudom hogy melyik lesz, de ha "STH-10 kell" akkor égesd be azt a FLASH-be.
Mindenesetre ha én ma kezdenék, nem ilyen bonyolult, hibásan dokumentált áramkörrel játszanék.
A hozzászólás módosítva: Márc 31, 2013
(#) pittosi válasza zombee hozzászólására (») Márc 31, 2013 /
 
Ez egy probléma más már meg irta működik is neki Pl joededy <joededy@freemail.hu>
de most külföldön van .
A tanulást nem itt kezdem pic az megy és meg akarom ismeri az AVR is ez csak programozás ,
A program írás az egy led . vagy több led .De mivel keltetéssel foglalkozom, ez kéne.
(#) zombee válasza pittosi hozzászólására (») Márc 31, 2013 /
 
Ez esetben - bármilyen sürgős is - tényleg azt tanácsolom hogy olyantól kérj segítséget aki meg
is építette+működött neki, ha más nincs akkor az eredeti szerzőtől, mert nem tudunk segíteni.
Hacsak nem akad itt valaki aki szintén sikerre vitte a cuccost...
(#) pittosi válasza zombee hozzászólására (») Ápr 1, 2013 /
 
A táblázat mútatja nem AVR studio 4 -gyellett programozva. Amivel csinálták az nyomtatóportról megy nekem meg usb van . Azt viszont nem értem usb mért nem megy?
(#) lajtosali hozzászólása Ápr 1, 2013 /
 
Sziasztok.Mi a teendő abban az esetben ha jtag-en nem tudok kapcsolódni a tbird2 panelemmel mert vmi nem valós id-vel tér vissza.nincs vmi jtag reset megoldás?vagy avr doperrel tudok még hozzá csatlakozni?szerezzek be új panelt?jtag ice-t ír,esetleg mással?Köszi!
(#) fekete123 hozzászólása Ápr 2, 2013 /
 
Sziasztok!

Szakdogához egy Atmega32-őt akarok összekötni egy MPU6050 giroszkóp-gyorsulásmérő párossal I2C kapcsolattal. Egy tönkrement SPI-s gyrot kell lecserélnem úgy, hogy sose használtam I2C-t.

A gyro kiszerelése ez: GY-521 Itt találtam egy kis írást róla, ha jól értem akkor erre tettek az SDA SCL lábakra ellenállás, tehát nekem nem kell külön.

Az adatlap 37. oldalán találni egy leírást arról hogy hogyan kell egy regiszter adatait kiolvasni.

A másik adatlap 7. oldalán rögtön a második regiszter a 0x3b. elvileg a gyorsulásmérő egyik tengelyének felső 8 bitje. Ha jól értelmezem ezeket bármikor ki lehet olvasni.

A Következő kódrészlettel próbálkoztam, átnéztem a Hobbielektronikás I2C írást is, de nem jutok egyről a kettőre vele. Úgy láttam hogy ha csak azt a start parancsot küldöm el, már akkor is elakad a program. Mi lehet a hiba?

Atmega32A 8MHz
I2C 100 KHz (Adatlap 400-at ír alacsonyabb gondolom lehet.)

Még azt is elfogadható megoldásnak tartanám, ha mondtok egy olcsó ebay-es SPI-t használó giroszkópot. Az előző LISY300-nak egy oldalas kód elég volt.



  1. /*
  2.  * MPU6050.c
  3.  *
  4.  * Created: 2013.04.01. 19:54:52
  5.  *  Author: F
  6.  */
  7.  
  8.  
  9. #include <avr/io.h>
  10. #include <util/delay.h>
  11. #include <avr/interrupt.h>
  12. #include <math.h>
  13. #include <string.h>
  14. #include <stdlib.h>
  15. #include "h\USART_serial.h"
  16.  
  17. #define Hz                              100
  18. #define loopTIME                1249    //124 = 1000Hz
  19. #define RAD_to_DEG              57.295779513082320876798154814105
  20.  
  21. //#define I2Cfreq                       8000000/16+2(TWBR)*4^TWPS
  22. //----------USART------------------------------------
  23. #define MYUBRR 12       //8MHz 38400baud 0.2% error UBRR=12
  24.  
  25. void TWI_init_master(void);
  26. void TWI_start(void);
  27. void TWI_write_address(unsigned char data);
  28. void TWI_read_address(unsigned char data);
  29. void TWI_write_data(unsigned char data);
  30. unsigned char TWI_read_data(void);
  31. void TWI_stop(void);
  32. void TWI_RepStart(void);
  33.  
  34. int main(void)
  35. {
  36.         uint8_t MPU6050_adat = 0;
  37.         USART_Init(MYUBRR);
  38.         TWI_init_master();     
  39.     while(1)
  40.     {
  41.                 TWI_start();
  42.                 TWI_write_address(0b11010000);
  43.                 TWI_write_data(0x3b);  
  44.                 TWI_RepStart();
  45.                 TWI_read_address(0b11010001);
  46.                 MPU6050_adat = TWI_read_data();
  47.                 TWI_stop();
  48.  
  49.                 _delay_ms(100);
  50.                 USART_Transmit_int(11);
  51.                 USART_Transmit(',');
  52.                 USART_Transmit(0x0A);
  53.         //TODO:: Please write your application code
  54.     }
  55. }
  56.  
  57. void TWI_init_master(void) // Function to initialize master
  58. {
  59.         TWBR=32;    // Bit rate
  60.         TWSR &= ~(1<<TWPS1 | 1<<TWPS0);    // Setting prescalar bits
  61. }
  62.  
  63. void TWI_RepStart(void)
  64. {
  65.         // Clear TWI interrupt flag, Put start condition on SDA, Enable TWI
  66.         TWCR= (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
  67.         while(!(TWCR & (1<<TWINT))); // Wait till start condition is transmitted
  68.         while((TWSR & 0xF8)!= 0x10); // Check for the acknowledgement
  69.         //0x08 A START condition has been transmitted
  70. }
  71.  
  72. void TWI_start(void)
  73. {
  74.         // Clear TWI interrupt flag, Put start condition on SDA, Enable TWI
  75.         TWCR= (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
  76.         while(!(TWCR & (1<<TWINT))); // Wait till start condition is transmitted
  77.         while((TWSR & 0xF8)!= 0x08); // Check for the acknowledgement
  78.         //0x08 A START condition has been transmitted
  79. }
  80.  
  81. void TWI_write_address(unsigned char data)
  82. {
  83.         TWDR=data;    // Address and read instruction
  84.         TWCR=(1<<TWINT)|(1<<TWEN);    // Clear TWI interrupt flag,Enable TWI
  85.         while (!(TWCR & (1<<TWINT))); // Wait till complete TWDR byte received
  86.         while((TWSR & 0xF8)!= 0x18);  // Check for the acknoledgement
  87. }
  88.  
  89. void TWI_read_address(unsigned char data)
  90. {
  91.         TWDR=data;    // Address and read instruction
  92.         TWCR=(1<<TWINT)|(1<<TWEN);    // Clear TWI interrupt flag,Enable TWI
  93.         while (!(TWCR & (1<<TWINT))); // Wait till complete TWDR byte received
  94.         while((TWSR & 0xF8)!= 0x40);  // Check for the acknoledgement
  95. }
  96.  
  97. void TWI_write_data(unsigned char data)
  98. {
  99.         TWDR=data;    // put data in TWDR
  100.         TWCR=(1<<TWINT)|(1<<TWEN);    // Clear TWI interrupt flag,Enable TWI
  101.         while (!(TWCR & (1<<TWINT))); // Wait till complete TWDR byte transmitted
  102.         while((TWSR & 0xF8) != 0x28); // Check for the acknoledgement
  103. }
  104.  
  105. unsigned char TWI_read_data()
  106. {
  107. //      uint8_t data = 0;
  108. //      TWCR=(1<<TWINT)|(1<<TWEN);    // Clear TWI interrupt flag,Enable TWI
  109. //      while (!(TWCR & (1<<TWINT))); // Wait till complete TWDR byte transmitted
  110. //      while((TWSR & 0xF8) != 0x28); // Check for the acknoledgement
  111.         while (!(TWCR & (1<<TWINT)));
  112.         return TWDR;
  113. }
  114.  
  115. void TWI_stop(void)
  116. {
  117.         // Clear TWI interrupt flag, Put stop condition on SDA, Enable TWI
  118.         TWCR= (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
  119.         while(!(TWCR & (1<<TWSTO)));  // Wait till stop condition is transmitted
  120. }
(#) zombee válasza pittosi hozzászólására (») Ápr 2, 2013 /
 
Az a baj hogy maga a beállítás hibás, és az egész rosszul van dokumentálva.
A programozó felület innentől már tökmindegy, nem attól lesz jó vagy rossz.
A hozzászólás módosítva: Ápr 2, 2013
(#) zombee válasza lajtosali hozzászólására (») Ápr 2, 2013 /
 
A szöveg azt jelenti hogy a JTAG-ed jó, csak nem csatlakozik a panelhez. Lehetséges hogy
a JTAGEN nevű FUSE bit ki van kapcsolva. Csúnyán elbeszélgetnék azzal aki T-Bird panelen ezt teszi.
(#) hygy hozzászólása Ápr 2, 2013 /
 
Hello!

Beszereztem egy ilyen HB100 doppler radaros érzékelőt. Megépítettem az erősítő kapcsolást ami a specifikációban van, össze kötöttem az arduino UNO-val. Soros porton tolja vissza az adatokat PC felé ahol egy libbel sikerült grafikont rajzolni belőle. Az látszik, hogy ha mozgatom előtte a kezem, akkor változik a jel amplitúdója és frekije.

Van valakinek tapasztalata, hogy miként lehetne ezt feldolgozni arduinoval? Egy mozgás érzékelőt szeretnék belőle kreálni.

datasheet

application note

Kerestem rá doksit a neten. Valaki valami olyasmit írt, hogy ahhoz, hogy az arduino-val teljes értékűen lehessen használni ezt a modult frekvencia osztó kellene az szenzor kimenete és az arduino közé. Szóval nem teljesen vágtam le, hogy miként működik ez a cucc.

köszi
HyGy
A hozzászólás módosítva: Ápr 2, 2013
(#) ThompsoN hozzászólása Ápr 2, 2013 /
 
Sziasztok.

Ha a RESET-et letiltom, akkor utána tudom még programozni a mikrokontrollert, vagy már nem?
(#) Gafly válasza hygy hozzászólására (») Ápr 2, 2013 /
 
Az adatlap alapján a mozgás segességével arányos frekvenciájú jelet ad ki.
A sebesség frekvencia képlet ott van a doksikban amit linkeltél.
Négyszögesíteni kell (gondolom az általad írt "osztás" is ezt jelenti).

Nagyjából annyi infót lehet belőle kiszedni, hogy valahol előttem van valahol valami, ami hozzám képest ekkora sebességgel közeledik vagy távolodik...

Nehezen tudom elképzelni, hogy ez az infó így használható bármi értelmesre
(#) hygy válasza Gafly hozzászólására (») Ápr 2, 2013 /
 
Ez mozgás érzékelőnél pont jó lehet.

Ha jól értem elvileg a jel amplitudója arányos a tárgy méretével, a frekvenciából pedig a sebességet lehet kiszámolni. Ez az infó egy mozgásérzékelőhöz pont jó lehet.

Most egy analóg bemeneten van a cucc. Négyszögesíteni tudom sw-ből, vagy ahhoz valami HW lenne célszerűbb?

HyGy
(#) zombee válasza ThompsoN hozzászólására (») Ápr 2, 2013 /
 
Ha az a cél hogy a programot ne tudják később kiolvasni akkor a lock biteket használd!
Ha a RESET portfunkcióra kell és átállítod(RSTDISBL), utána normál (ISP) programozóval már nem
tudod programozni, csak nagyfeszültségű(HVPP/HVSP-képes) programozóval.

8 és 14 lábú ATTiny-k esetében a Doper viszi, ha az eredeti HVSP-képes fajtát építed meg.
Nagyobb IC-k esetében HVPP-képes cucc kell, ilyen a Fusebit Doctor.
Ez visszaállítja a gyári állapotot, és újból tudod programozni.

6 lábú ATTiny(t4/5/9/10)-nél ha letiltod a RESET-et akkor az AVRISP-mkII még vinni fogja,
ha az IC és a programozó közé a RESET vonalra egy 12V-os kapcsoló fokozatot építesz be.
Én valami gagyi optocsatolóval oldottam meg, tökéletesen megy!
(#) ThompsoN válasza zombee hozzászólására (») Ápr 2, 2013 /
 
Értem, köszi. Lehet, hogy szükségem lesz a RESET lábra I/O lábként, azért kérdeztem meg. Mert akkor a programot nem árt elsőre jól megírni.
(#) zombee válasza ThompsoN hozzászólására (») Ápr 2, 2013 /
 
Ha nincs nagyfesz programozód akkor első körben fejlessz nagyobb IC-re,
később lehet hogy fel is szabadul 1-2 láb és visszatérhetsz a kisebb fajtára.
(#) ThompsoN válasza zombee hozzászólására (») Ápr 2, 2013 /
 
Azzal kell gazdálkodnom, amim van, ez jelen esetben két ATTiny24. Még nem biztos, hogy szükséges lesz az az öt láb, de lehetséges.
(#) zombee válasza ThompsoN hozzászólására (») Ápr 2, 2013 /
 
Na erre pont jó a Doper bővített változata!
A hozzászólás módosítva: Ápr 2, 2013
(#) Sick-Bastard válasza zombee hozzászólására (») Ápr 3, 2013 /
 
Üdv!

Sajnos nem jöttem rá... Nem, hogy 10-12mp-en belül, de jó 1 hét alatt sem...

Az ADC bekötésem most valahogy így néz ki.

Úgy gondoltam, hogy nem az ingadozó VCC-t használom Vref-nek, hanem az AVR beépített 2,56V-os Vref-jét használom. Ám ehhez a szenzorból kapott feszültség túl magas ~3V. Ezért a szenzorból kapott feszültséget elfeleztem az R2 és R3 ellenállásokkal.

Sajnos az ingadozás (2-4fok) még így is megmaradt.

Amit szerintem elfelejtettem megírni, hogy az eredményt én SPI-n keresztül egy MCP23S17 IC-vel iratom ki egy 8as LED sorra binárisan.
Azon is gondolkodtam, hogy lehet rossz változót/változókat használok?

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #include <MCP23S17.h>
  4.  
  5. #define Vref 2.56
  6.        
  7. int main(void)
  8. {
  9. long int temp;
  10. SPI_Init();
  11. MCP23S17_Init();
  12.  
  13. // Set ADMUX Channel for LM35DZ Input
  14. ADMUX |=  (1<<REFS0) | (1<<REFS1) | (0<<ADLAR);
  15. ADMUX &= ~((1<<ADLAR) | (0<<REFS1));
  16. // Initial the ADC Circuit
  17. ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
  18.  
  19.         while(1)
  20.         {
  21.                 ADCSRA |= (1<<ADSC);
  22.                 // wait until convertion complete ADSC=0 -> Complete
  23.                 while (ADCSRA & (1<<ADSC));
  24.                 // Get ADC Result
  25.                
  26.                 temp = ((Vref*ADCW/1024)*2-2.7315)*100;
  27.                
  28.                 MCPWR(GPIOA, temp);
  29.                 _delay_ms(1000);
  30.                 temp = 0;
  31.         }
  32. }
(#) zombee válasza Sick-Bastard hozzászólására (») Ápr 3, 2013 /
 
Az AREF lábon van kondi?

Megoldás: sokszor kell mérni, kiátlagolod és lesz egy stabil eredményed.
A gyári cuccok is ezt csinálják, ezért lassúak.
(#) Sick-Bastard válasza zombee hozzászólására (») Ápr 3, 2013 /
 
Jaja van egy 220 nF-os kerámia.

Köszönöm a megoldást. Így már nem nagyon ugrál.
(#) lajtosali válasza zombee hozzászólására (») Ápr 3, 2013 /
 
Köszi Zombee!Én voltam aki ilyet művelt a t-bird panelle.Nincs semmi ismeretem ezekben a dolgokban így előfordulhat ilyen az életben.Lehet te sem tudnál mindent elsőre megcsinálni egy olyan témában amihez eddigi életed során közöd sem volt csak esetleg tudtál róla,hogy létezik.Ha meg tanító jellegű a felkérésed,akkor állok elébe,mivel a környéken senki nem tud segíteni,csoporttársam meg 20 éve programozik így már a szavait sem értem hiába segítene.De megnyugtatok mindenkit,ha elvégzem a sulit nem fognak találkozni az álltalam programozott kütyükkel!
(#) zombee válasza lajtosali hozzászólására (») Ápr 3, 2013 /
 
Eszem ágában sem volt leszólni Téged. A soraidból azt vettem ki hogy már így, hibásan kaptad kézhez
a panelt és még egyszer sem sikerült programoznod. Tehát nem Te rontottad el. De akkor mégis?
Azt nem írtad hogy korábban már ment, most meg nem.

Szóval az első lépés: Uc-JTAG és JTAG nevű csatlakozók össze vannak kötve a szalagkábellel?

Ha így se megy akkor ISP programozóval kell próbálkozni. Csak az a baj hogy a programozólábak
az FT-232-re is rámennek. Ezek a PDI és PDO. A fóliát át kell vágnod egy helyen, különben
az FT-232 szembekapcsol a programozóval és nem fog sikerülni a programozás.
Az ISP programozó kivezetéseit pedig rá kell drótoznod a panelre, mert mindegyik másfele megy.
Ha van forrólevegős pákád, akkor lehet hogy egyszerűbb lesz az IC-t kicserélned.
Ha pedig garanciás akkor reklamálhatsz hogy nem megy, azt nem kell említened hogy elrontottad.

Én már megtanultam hogy ha ATMega128-al JTAG portos cuccot tervezek, legyen rajta ISP is!
A két képen az általam készített GSM panel van. Jobboldalt a felső fekete csati a JTAG, az alsó ISP.
A hozzászólás módosítva: Ápr 3, 2013

PICT0656.JPG
    
Következő: »»   529 / 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