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   362 / 840
(#) UbiLinux válasza Reggie hozzászólására (») Szept 28, 2011 /
 
Nem férek hozzá regiszterekhez. Valami mást kell kitalálnom a reset detektálására, mert ha leáll az oszci, akkor csak a tápfesz ki-be hozza rendbe.
(#) sikolymester válasza kiborg hozzászólására (») Szept 29, 2011 /
 
Például ez

Szépen bekonfigolod AT parancsokkal és működik is. Ennyi.
(#) kiborg válasza sikolymester hozzászólására (») Szept 29, 2011 /
 
Nem gondoltam, hogy egymással is képesek kommunikálni, eddig csak azt hittem, hogy csakis és kizárólag PC-vel állnak szóba. Én kis naív....
Valahol van ezeknek leírásuk, hogy hogyan és mint is állítsam be őket ?
(#) TavIR-AVR válasza kiborg hozzászólására (») Szept 29, 2011 /
 
A Xbee modulokról a www.digi.com oldalon van rengeteg leírás...

Röviden:
Szórt üzenet: FFFF-FFFF című eszköz. Ekkor mindenki megkapja. Ha meg a céleszköz ID-jét adod meg, akkor azzal lesz transzparensen beszélgető.
Fontos, hogy azonos PAN-ban legyenek (Personal Area Network).
+++ belépés az AT parancskörbe. Utána ATxx parancsokkal lehet beszélgetni. vagy PC-vel az USBExplorer HW-l és az X-CTU SW menüből is beállítja.
ATCN a beállítóból való kilépés.
Sokat segít ha 2 USBExplorer + Xbee modullal játszol. 2 PC és szétkonfigurálható a rendszer

De ha simán az "XBee/Zigbee digi ppt" kifejezésre keresel rengeteg rajzot/leírást kapsz...
(#) kiborg válasza TavIR-AVR hozzászólására (») Szept 29, 2011 /
 
Köszi.
Halkan merem megkérdezni, hogy amit írtál, az Bluetooth vagy Xbee ?
Melyik a jobb? A bluetooth szimpatikusabb talán. Árban egykutya mindkettő. Viszont Zigbee-n van alapból antenna.
(#) Reggie válasza UbiLinux hozzászólására (») Szept 29, 2011 /
 
Reset sem hozza rendbe, csak a tap elvetel?
(#) TavIR-AVR válasza kiborg hozzászólására (») Szept 29, 2011 /
 
Xbee. Nekem stabilabbnak tűnik. A 868MHz-s meg tud 10 km-t! Igaz ekkor 9600 bps sebesség.

A BT sebessége nagyobb.
(#) sikolymester válasza TavIR-AVR hozzászólására (») Szept 30, 2011 /
 
Ez a 10km nem hangzik rosszul. Hadd kérdezzem meg, hogy neked van tapasztalatod xbee hatótávolsággal kapcsolatban? Vagy ez csak adatlapi becslés?
(#) Ricsi89 hozzászólása Okt 1, 2011 /
 
Sziasztok!
GSm modullal akarok sms-t küldeni ,de valami nem jó. Eddig csak annyit láttam, hogy a gsm modul visszadob egy hibaüzit, de azt nem, hogy miért. Most rájöttem a gondra, csak nem tudom mi a fenéért vacakol. Nem tudom hogy tud olyat kiküldeni a soros portra, ami ott sincs. Pontosabban olyan szöveget küld ki, ami egy másik funkcióban van, de semmi köze a porthoz, max lcd-re íráshoz, viszont az a funkciót nem használom most sehol. Ennyi lenne most csak a lényeg, a többit nem használom, de ha kell berakom az egész forráskódot.
  1. int main(){
  2. DDRB |= 0x01;
  3. USART_Init(MYUBRR);
  4. lcd_init();
  5. lcd_control(1, 0, 0);
  6. //Funct_GPS
  7. lcd_putstr("GPS-LCD V1.0 aktiv!", 0);
  8. _delay_ms(2000);
  9. lcd_cls();
  10. Funct_GSM
  11. lcd_cls();
  12. UART_send_string("AT+CMGS=\"06703847530\"");
  13. _delay_ms(1000);
  14. UART_send_string("Hello, haliho!");
  15. USART_Transmit(0x1a);
  16. USART_Transmit(0x0d);
  17. UART_read_string();
  18. _delay_ms(200);
  19. //lcd_cls();
  20. lcd_putstr(data, 00);
  21.  
  22.  
  23. //request_gps();
  24. //_delay_ms(1000);
  25.  
  26.  
  27. return 1;
  28. }


És itt lenne, amit kiír.
  1. AT+CMGS="06703847530" Hello, haliho! %.5f Varakozas a gps-re... $GPGGA Hello, haliho! %.5f Varakozas a gps-re... $GPGGA

Nem értem, hogy hogyan tud belekeveredni olyan a dologba, amit meg sem hívok, meg köze sincs a küldéshez. Nem értem mi lehet a gond. Ilyen kavarodással még nem találkoztam. A gps-es funkciókat nem is használom mégis belekeveredik a dologba.
(#) Ricsi89 válasza Ricsi89 hozzászólására (») Okt 1, 2011 /
 
És a vicc az egészben, hogy az első részt, a "GPGGA"-ig egyszerre írja az elejével, majd a várakozás lejártával jön a többi rész. Na most hogy kerül bele az első részbe az, aminek majd csak később kellene?
(#) Robi98 hozzászólása Okt 1, 2011 /
 
Sziasztok!
Írtam egy programot aminek az lenne a feladata, hogy 8 LED-et villogtasson egy futófényként(oda-vissza).
Valamint egy potméter tekerésével nőjön a villogás sebessége.A kódot megírtam, de a fordító mindig talál benne egy súlyos és egy kevésbé súlyos hibát amit az istennek nem tudom kijavítani, mivel még nagyon kezdő vagyok.
Íme a hibás kód:
  1. #include<avr/io.h>
  2. #include<util/delay.h>
  3.  
  4. int main(){
  5.  
  6. DDRD|=0xFF;
  7. ADMUX=(1<<REFS0)|(1<<ADLAR);
  8. ADCSRA=(1<<ADEN)|(1<<ADPS1)|(1<<ADPS0);
  9.  
  10. void ADConverter(unsigned char csatorna)
  11. {
  12. ADMUX|=csatorna;
  13. ADCSRA|=(1<<ADSC);
  14. while(ADCSRA & (1<<ADSC));
  15. ADCSRA|=(1<<ADSC);
  16. while(ADCSRA & (1<<ADSC));
  17. return (ADCH);
  18. }
  19.  
  20. unsigned char potmeter,i,j;
  21.  
  22. potmeter=ADConverter(1);
  23.  
  24. void szunet(unsigned char potmeter)
  25. {
  26.  
  27. for(j=1;j<=potmeter;j++) _delay_ms(5);
  28. }
  29.  
  30. while(1){
  31.  
  32. i=0b10000000;
  33.  
  34. while(i){
  35. i=i>>1;
  36. PORTD=i;
  37. szunet(potmeter);
  38. }
  39.  
  40. i=0b00000001;
  41. while(i)
  42. {
  43. i=i<<1;
  44. PORTD=i;
  45. szunet(potmeter);
  46. }
  47.  
  48. };
  49.  
  50. };

És íme a két hibaüzenet:

../main.c: In function 'ADConverter':

../main.c:18: warning: 'return' with a value, in function returning void

../main.c: In function 'main':

../main.c:23: error: void value not ignored as it ought to be

make: *** [main.o] Error 1

Build failed with 1 errors and 1 warnings...

Köszönöm!
(#) Reggie válasza Ricsi89 hozzászólására (») Okt 1, 2011 /
 
Tipikusan verem tulcsordulaskor, illetve olyan string hasznalatakor fordul elo, amely nincsen 0-val lezarva. A keveredes oka az, hogy a konstansokat egy teruletre rendezi ossze a fordito.
(#) Reggie válasza Robi98 hozzászólására (») Okt 1, 2011 /
 
Az ADConverter fuggvenyed a deklaracio szerint nem add visszateresi erteket, viszont te a vegen a return -nek ads parametert. Szerintem a fuggvenyt nem void-kent hanem uint8_t-kent akartad deklaralni.
A masik hiba ennek a folyamanya, mivel a fordito az elozo problemat ugy probalja korrigalni, hogy ragaszkodik a fuggvenydeklaraciodhoz es void-nak veszi, a return utan adott erteket siman eldobja. Viszont te ezt a fuggvenyt meghivod a 23. sorban es visszateresi erteket varsz tole, annak ellenere, hogy void, igy ezzel mar nem tud mit kezdeni a fordito.
A 10. sorban irjad at a void-ot uint8_t-re es a problema megoldodik.
(#) Ricsi89 válasza Reggie hozzászólására (») Okt 1, 2011 /
 
Akkor elvileg az UART_send_string -ben lehet a hiba, ott lehet valami gubanc, mert azután jön elő a hiba, mindkétszer. Ezt én írtam, az én elgondolásom szerint, a legegyszerűbben. Működni működik, de lehet, hogy nem teljesen jól.
  1. void UART_send_string( char *data){
  2.  
  3. while(!(*data=='\n')){
  4. USART_Transmit(*data);
  5. *data++;
  6. }
  7. }
(#) Reggie válasza Ricsi89 hozzászólására (») Okt 1, 2011 /
 
Igen, ez a hiba. A *data -t 0x00-ra kell tesztelned, mert az jelzi a veget. A \n erteke 0x0A, ez az ujsor karakter, ami nincs is a stringjeidben.

A data novelesenel *data++ helyet data++ elegendo, ha elotte van a * akkor elvileg egy pointeres cimzest is vegez(amit egy jobb optimalizalas mar kiszed, de attol meg nem szep, ugyanis te a tarolt ertekkel nem akarsz semmit sem kezdeni, csak a pointer erteket akarod novelni).
(#) Ricsi89 válasza Reggie hozzászólására (») Okt 1, 2011 /
 
Tényleg valahogy erre nem is gondoltam. Már működik is rendesen. Köszönöm szépen a segítséget. Szerintem ha egy hétig néztem volna, akkor sem jövök rá a hibára.
(#) chocob hozzászólása Okt 1, 2011 /
 
Üdv!
Szeretnék gy atmega8-at usb-n összekötni pcvel.
Cél ic (pl. ft232rl) nélkül, Virtual-usb segítségével. Gyakorlás képp utánépítettem egy kész projektet, tehát az áramkör és a szoftverek elvileg rendben, mégsem működik. Rengeteg dologgal próbálkoztam már eredménytelenül, szóval nagyon örülnék ha valaki tudna ötletet adni hogy mit ronthattam el. Konkrétan ezt készítettem: Bővebben: Link
Ha csatlakoztatom pc-hez windows azt mondja hiba történt, eszközkezelő látja de vendor id/product id nulla.
Esetleg lehet az a gond hogy 22pF helyett 27pF kondenzátort használok a kristályhoz? Vagy esetleg az d+/d- 68 ohmos ellenállásai helyett 62 ohmosat raktam?
Másban nem tértem el és olyan egyszerű a kapcsolás, pláne hogy utánépítés nem értem mit rontottam el.
Bármi ötletnek örülnék.
(#) TavIR-AVR válasza chocob hozzászólására (») Okt 1, 2011 /
 
1, A tapfesz nem stabil
2, a fusebitek beallitva?
(#) TavIR-AVR válasza chocob hozzászólására (») Okt 1, 2011 /
 
Hol van ebben a FT232RL????
Emulált USB! Enyhe alkatrészhiánnyal....
Aref? VccA? GNDA bekötését ki teszi meg?
(#) dB_Thunder válasza TavIR-AVR hozzászólására (») Okt 1, 2011 /
 
nem figyelsz
Idézet:
„Cél ic (pl. ft232rl) nélkül, Virtual-usb segítségével.”
(#) neogeo2 válasza chocob hozzászólására (») Okt 1, 2011 /
 
A d+ és d- nincs felcserélve véletlen?
(#) sikolymester válasza chocob hozzászólására (») Okt 1, 2011 /
 
Fordítsd rá ezt a kódot: Bővebben: Link
Ennek biztosan kellene mennie, hogyha a hardver rendben van. Amennyiben ez nem megy, akkor csipogj ki mindent rajta. Az AVCC tápot ugyan érdemes bekötni, de nem feltétlenül szükséges (én javaslom mindenesetre).
(#) chocob válasza TavIR-AVR hozzászólására (») Okt 1, 2011 /
 
Tápfeszt csak a pctől kap. Tudnám még hálózati usb adapterről táplálni, bár ami van annak 5v +-5% szóval nem a legstabilabb.
Két fuse beállítást használtam (ha jól gondolom csak ez jöhet szóba):
-cksel 0..3 és sut 0,1 mind programmed
-mint az előző csak cksel 1 unprogrammed

Induláskor pwm-ezi a ledeket, a sebességéből ítélve szerintem jó az órajel.
(#) chocob válasza neogeo2 hozzászólására (») Okt 1, 2011 /
 
Az avr programjában felcseréltem próbaképp de úgy sem működött.
(#) chocob válasza sikolymester hozzászólására (») Okt 1, 2011 /
 
Köszönöm ezt megnézem. AVCC-t bekötöttem,az AGND-t nem.
(#) chocob válasza TavIR-AVR hozzászólására (») Okt 1, 2011 /
 
Aref nem csak a/d konverziónál lenne szükséges?
(#) UbiLinux válasza Robi98 hozzászólására (») Okt 1, 2011 /
 
Itt a main egyszerűen ráfut az ADConverterre !
(#) sikolymester válasza chocob hozzászólására (») Okt 2, 2011 /
 
Dehogynem!

Sőt, bizonyos ADC beállításmál egyenesen tilos, hogy legyen az AREF-en táp.

Atmega8: "If the user has a fixed voltage source connected to the AREF pin, the user may not use the other
reference voltage options in the application, as they will be shorted to the external voltage."

Tehát az AREF bekötése, hogyha nincsen használatban az ADC modul teljesen felesleges. Amennyiben az ADC modul használva van, akkor is el kell gondolkodni előtte, hogy miként használjuk majd, mielőtt rákötjük szeleburdi módon a tápot.

Ami a hivatalosságot illeti:
"AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be
externally connected to VCC, even if the ADC is not used."

Tehát az AVCC-t be kell kötni.
Ami az AGND-t illeti, az egy érdekes jószág az atmega8-ban, hiszen csak a blokk diagramban van említve. Valószínűleg az AVCC mellett található GND-re gondolhatnak. Annak a bekötése természetesen szintén javasolt.
(#) kiborg válasza chocob hozzászólására (») Okt 2, 2011 /
 
Szia!

http://www.hobbielektronika.hu/forum/topic_hsz_544862.html#544862 ebben a hozzászólásban megtalálod ami neked kell. szoftveres usb mega8-al. Forráskód is adott, nézd tovább a linkeket.
Üdv Kiborg
(#) chocob hozzászólása Okt 2, 2011 /
 
Köszönöm a segítséget mindenkinek!
Megoldódott, működik.
Ahogy Neogeo2 mondta felcseréltem d+ és d- vezetéket. Elég szégyenletes hogy azt hittem szoftveresen ki tudom próbálni fordítva, csak most kapcsoltam hogy fizikailag kell átkötnöm, ez után egyből működött.
Még egyszer köszönöm mindenkinek.
Következő: »»   362 / 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