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   706 / 840
(#) Hp41C válasza Ivan93 hozzászólására (») Nov 22, 2015 /
 
Idézet:
„temperature=-46.86+175.72*data/65536;”

uint16_t data;
E deklaráció miatt a data/65536 mindig 0 lesz, hiszen data értéke max. 65535 lehet és az osztás egész osztás.
  1. temperature=-46.86+175.72*((double)data)/65536.0;

Idézet:
„humidity=data*(125/65536)-6;”

Hasonlóképen a (125/65536) mindig 0, mert egész osztást használ a fordító.
humidity=(double)(data*125)/65536.0) - 6;
(#) Ivan93 válasza Hp41C hozzászólására (») Nov 22, 2015 /
 
Köszi, eddig még nem jutottam el, de kijavítottam és ugyanúgy a build-ben ezt kapom:
  1. Build started 22.11.2015 at 16:40:00
  2. avr-gcc  -mmcu=atmega328p -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
  3. avr-gcc -mmcu=atmega328p -Wl,-Map=idojarasallomas_ado.map main.o     -o idojarasallomas_ado.elf
  4. c:/program files/winavr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\libc.a(log.o): In function `log':
  5. (.text.fplib+0x46): relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in c:/program files/winavr/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a(_addsub_sf.o)
  6. c:/program files/winavr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\libc.a(log.o): In function `log':
  7. (.text.fplib+0x4e): relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in c:/program files/winavr/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a(_addsub_sf.o)
  8. c:/program files/winavr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5\libc.a(modf.o): In function `modf':
  9. (.text.fplib+0x3e): relocation truncated to fit: R_AVR_13_PCREL against symbol `__subsf3' defined in .text section in c:/program files/winavr/bin/../lib/gcc/avr/4.3.2/avr5\libgcc.a(_addsub_sf.o)
  10. make: *** [idojarasallomas_ado.elf] Error 1
  11. Build failed with 1 errors and 0 warnings...
Nem tudom ez mit jelent, még nem láttam ilyet.
A hozzászólás módosítva: Nov 22, 2015
(#) kapu48 válasza Ivan93 hozzászólására (») Nov 22, 2015 /
 
Próbáldmeg, kihagyni ezt a sort: #include <inttypes.h>
(#) Ivan93 válasza kapu48 hozzászólására (») Nov 22, 2015 /
 
Sajnos nem segített. Megkerestem a hibaüzenetben lévő fájlt, (kicsit más útvonalon találtam mint írta), de nem mond semmit a tartalma (melléklet)

libc.a
    
(#) rolandgw válasza Ivan93 hozzászólására (») Nov 22, 2015 /
 
Szerintem a winavr-t nem kellene már erőltetni,de valószínűleg ez a probléma és a megoldás.
(#) Ivan93 válasza rolandgw hozzászólására (») Nov 22, 2015 /
 
Hozzáadtam a linker-hez a '-lm'-t de nem segített. Megnéztem a bmp085.c-ben van olyan függvény aminek az argumentuma tömböt kap. Az az érdekes, hogy külön a pára- és hőmérő (ezt én írtam, és az lcd.c-t) és külön a légnyomás (ez a Gironi féle könyvtár, én nem tudtam működésre bírni) lefordul hiba nélkül, de együtt nem.
A winavr-el mi a baj? Tudtok valami mást helyette?
(#) rolandgw válasza Ivan93 hozzászólására (») Nov 22, 2015 /
 
(#) kapu48 válasza rolandgw hozzászólására (») Nov 22, 2015 /
 
Atmel Studio 7!
Úgy tudom ez csak Win10-el müködik?
(#) rolandgw válasza kapu48 hozzászólására (») Nov 22, 2015 /
 
Nem,Win7-től indul.Viszont telepítéskor érdemes odafigyelni,mit teszel fel,mire van szükséged,mert elég nagy a hely és gépigénye.
(#) Auf válasza rolandgw hozzászólására (») Nov 22, 2015 /
 
Köszi!
De HD44780 -ról van szó. PORT, azt elírtam, tényleg PIN kell olvasni. Hogy érted, azt, hogy nem fog működni? Az asm feltétel, nem én akartam...
A hozzászólás módosítva: Nov 22, 2015
(#) Kovidivi válasza Ivan93 hozzászólására (») Nov 22, 2015 /
 
Itt nem biztos, hogy az idézett sorokkal van gond, hanem a könyvtárral. Mikor kikommenteled, akkor a könyvtár sem fordítódik bele, és nem ír ki hibát.
(#) Ivan93 válasza Kovidivi hozzászólására (») Nov 22, 2015 /
 
A könyvtár csak a légnyomáshoz van, azok a sorok nem használnak könyvtárat, legalábbis nem plusz könyvtárat, mint az lcd vagy a nyomásmérő.
(#) rolandgw válasza Auf hozzászólására (») Nov 22, 2015 /
 
Az enable kimaradt.Itt találsz példákat minden verzióra.
(#) Auf válasza rolandgw hozzászólására (») Nov 22, 2015 /
 
Köszönök mindent!
(#) csabeszq hozzászólása Nov 22, 2015 /
 
Kipróbáltam az esp-link nevű szoftvert.

Az alap probléma az, hogy nem akarsz minden vackot az USB portra rádugni. Ha mondjuk van 4A 20V táp, azt fizikailag a breadboard-on nem szívesen kapcsolod össze az USB-vel, mert valószínűleg a táp fog győztesen kikerülni zárlat esetén és a számítógép USB-je száll majd szét.

Az esp-link-et arra találták ki, hogy AVR és ARM IC-ket ESP8266-tal lehessen Wifi-n keresztül programozni. Egy ESP-01-esre felraktam a legújabb firmware-t, ez képes resetelni is a mikrokontrollert és fel is varázsolja a kódot.

Első látásra meglehetősen stabilnak tűnik, bár kell egy kis idő, hogy elinduljon (30 s). Persze miután az esp-link webszervere elindult, utána megy minden rendesen. Összekötöttem az Arduino-val is, néhány config módosítás után az upload az avrflash programmal wifin keresztül töltött fel mindent.
(#) Max26 hozzászólása Nov 23, 2015 /
 
Sziasztok!

Szeretném megoldani, hogy a mintavételezésem leállítása real time működjön. Jelenleg ha 1 perc a mintavételezés ideje, akkor 1 percig nyomva kéne tartanom a nyomógombot, hogy biztos megálljon.
Próbáltam ISR-be betenni a keypad beolvasást, de szenzor hibát jelez.
ISR-en belül kéne beolvastatnom a keypadot és ha lenyomtam 'A' gombot (mintavétel leállítás) akkor return0 ?
(#) csabeszq válasza Max26 hozzászólására (») Nov 23, 2015 /
 
A fő program nem tudja lekezelni a billentyűzet eseményt?

  1. volatile uint8_t allj_le = 0;
  2.  
  3. ISR(ADC_akarmi)
  4. {
  5.   // it mintavételezés feldolgozása
  6.   if( allj_le )
  7.     // itt leallitod az ADC-t
  8.     ;
  9. }
  10.  
  11. main()
  12. {
  13.   // itt indul a főprogram
  14.   allj_le = 0;
  15.   while(1)
  16.   {
  17.      if( billentyu_lenyomva() )
  18.        allj_le = 1;
  19.   }
  20. }


Magyarul a főprogram azonnal észleli, hogy lenyomtad a billentyűt, de amint az ISR feldolgozódik (1 perc múlva, akkor leállítja magát).

Másik megoldás:
a főprogramból szimplán azonnal lekapcsolod az ADC-t ADCSRA = 0-val. Az ADEN bit 0-lesz és teljesen tiltja az ADC-t. Nem kell megvárni a mintavételezés végét.
A hozzászólás módosítva: Nov 23, 2015
(#) troby hozzászólása Nov 23, 2015 /
 
Sziasztok. Szeretném megépíteni az AVR IV cikkben szereplő akkumulátor töltőt viszont nekem 1,2V os akkumulátoraim vannak 3000mah-ás az ebay-ről. Akkor én az áramkorlátozó ellenállás értékét 1,05V al számoljam mivel csak egy akkut akarok egyszerre tölteni? Így R=1.05V/0.1A=10.5 Ohm. Illetve a sönt értékét úgy számoljam, hogy R=1.2V/0.04=30 Ohm
(#) Kovidivi válasza troby hozzászólására (») Nov 23, 2015 /
 
AA méretben majdhogynem lehetetlen 3000mAh-t beleszuszakolni. Ha jó minőségű lenne az akksi, talán a 2600mAh meglenne, de 1$-ért ne várj, csak 1200mAh-t, vagy még annyit se.
(#) troby válasza Kovidivi hozzászólására (») Nov 23, 2015 /
 
Igen ezen már én is gondolkodtam, de kipróbálni, hogy hátha jó arra nem túl drága.
(#) Max26 válasza csabeszq hozzászólására (») Nov 23, 2015 /
 
A fő program kezeli a keypad beolvasást.
Ebbe a kódba szeretném beiktatni a real time nyomógomb érzékelést.:
Bővebben: Link

A tied alapján csináltam, de valamiért nem működött:

  1. uint8_t dolog = 0;
  2. volatile uint8_t allj_le = 0;
  3.  
  4. ISR (TIMER1_COMPA_vect)
  5. {
  6.         static uint16_t timer2_step = 0;
  7.         static uint32_t dolog_mstime = 0;
  8.  
  9.         timer2_step++;
  10.         if(timer2_step == TIMER_1MSTICKS) {
  11.                 //we are here every ms
  12.                 timer2_step = 0;
  13.  
  14.                 //tick the logger
  15.                 logger_mstick();
  16.  
  17.                 dolog_mstime++;
  18.                 if(dolog_mstime == DOLOG_MSTIME) {
  19.                         dolog_mstime = 0;
  20.                         dolog = 1;
  21.                 }
  22.         }
  23.       [b] if( allj_le )
  24.        return 0;[/b]
  25. }
  26.  
  27. main()
  28. {
  29.   // itt indul a főprogram
  30.   [b]allj_le = 0;[/b]
  31.   while(1)
  32.   {
  33.      if(dolog) {
  34.                         dolog = 0;
  35.  
  36.                         //get date
  37.                         ds1307_getdate(&year, &month, &day, &hour, &minute, &second);
  38.  
  39.                         //build logger_line
  40.                         memset(logger_buffer, 0, sizeof(logger_buffer));
  41.  
  42.                         itoa(year, buf, 10); strcat(logger_buffer, buf);
  43.                         strcat(logger_buffer, "/");
  44.                         itoa(month, buf, 10); strcat(logger_buffer, buf);
  45.                         strcat(logger_buffer, "/");
  46.                         itoa(day, buf, 10); strcat(logger_buffer, buf);
  47.                         strcat(logger_buffer, " ");
  48.                         itoa(hour, buf, 10); strcat(logger_buffer, buf);
  49.                         strcat(logger_buffer, ":");
  50.                         itoa(minute, buf, 10); strcat(logger_buffer, buf);
  51.                         strcat(logger_buffer, ":");
  52.                         itoa(second, buf, 10); strcat(logger_buffer, buf);
  53.  
  54.                         strcat(logger_buffer, ";");
  55.  
  56.                         strcat(logger_buffer, "test");
  57.  
  58.                         strcat(logger_buffer, "\r\n");
  59.  
  60.                         //log logger_line
  61.                         #if DEBUG_ENABLED == 1
  62.                         uart_puts("logging...\r\n");
  63.                         uart_puts("-----\r\n");
  64.                         uart_puts(logger_buffer);
  65.                         uart_puts("-----\r\n");
  66.                         #endif
  67.                         LEDLOGERROR_PORT |= (1<<LEDLOGERROR_PINNUM); //on
  68.                         if(logger_log(logger_buffer, (unsigned int)strlen(logger_buffer))) {
  69.                                 #if DEBUG_ENABLED == 1
  70.                                 uart_puts(" ok\r\n");
  71.                                 #endif
  72.                                 LEDLOGERROR_PORT &= ~(1<<LEDLOGERROR_PINNUM); //off
  73.                         } else {
  74.                                 #if DEBUG_ENABLED == 1
  75.                                 uart_puts(" failed\r\n");
  76.                                 #endif
  77.                         }
  78.                         #if DEBUG_ENABLED == 1
  79.                         uart_puts("\r\n");
  80.                         #endif
  81.                 }
  82.     [b] if( billentyu_lenyomva() )
  83.        allj_le = 1;[/b]
  84.   }
  85. }
  86.  
  87.  
  88. }
(#) csabeszq válasza Max26 hozzászólására (») Nov 23, 2015 /
 
Az ISR függvénynek nincs visszatérési értéke. A return 0 felesleges, leginkább a ne csinálj semmittel egyenértékű.

Vagy leállítod kompletten a timer1-et (TCCR1B=0), vagy hagyod járni és if-fel vizsgálod, hogy kell-e mintavételezni.
A hozzászólás módosítva: Nov 23, 2015
(#) Sick-Bastard válasza Ivan93 hozzászólására (») Nov 23, 2015 /
 
Üdv!

Kíváncsi voltam, hogy nálam is elő jön e a hiba, de nálam gond nélkül lefordította a WinAVR.
Ez alatt a két érték műveleteit értem.

Melyik AVR-re írtad?
(#) Ivan93 válasza Sick-Bastard hozzászólására (») Nov 23, 2015 /
 
Szia!
Atmega328p-re írtam. Külön-külön projectben már használtam a két szenzort, úgy nekem is lefordult és működött is, most próbáltam egyesíteni a két programot és itt már nem engedi.
(#) fecus hozzászólása Nov 23, 2015 /
 
Tudom, hogy ez klón.
Valaki használt már ilyet? Használható?
Minek a klónja, vagyis hol tudnám megnézni a rajzát? Majdnem annyiba kerül mint a chip magában. Lehet jó lenne a termosztát alapjaként, ha kikötöm a stabilizátort belőle.

Hol köti meg a kezem a csupasz chip-pel szemben?
(#) csabeszq válasza fecus hozzászólására (») Nov 23, 2015 /
 
Nekem a linkkel az a problémám, hogy Atmega168-at használ, ami fele akkora memóriával bír, mint a 328. Ráadásul a két chip közel egy árban van, ezért nem venném meg. Keress 328P-set.

Én mindig előre szerelten veszem meg a cuccot csupasz chip helyett, de Arduino Nano R3-at. Kevesebbet kell szívni vele, a különbség annyi, hogyha tönkrevágod, az egész panelt kell eldobni (még nem sikerült).

A Pro Mini annyiból jó, hogy van benne 5V stabilizátor, RESET gomb és kristály. A nano-ban meg USB csatlakozó és CH340G usb soros átalakító is.
(#) fifadani hozzászólása Nov 24, 2015 /
 
Sziasztok!
Szeretnék kérni egy pici segítséget Tőletek!

Van egy JTAG ICE-om, távol-keletről.
Bővebben: Kép
Továbbá egy atmega16A-m.
A driver-t tavir.hu-ról töltöttem le.
Viszont, amikor az avrstudio 4-ben, JTAG ICE-on keresztül kívánok csatlakozni a procihoz, nem hajlandó mást csinálni mint ezt: " target device did not return a valid JTAG ID"
3x raktam össze, figyelve a vezetékek helyes bekötésére. Adtam neki külső 5V-os tápot is, hátha... Továbbá 10k-s pull-up ellenállásokat, ahogy a kép is mutatja. Bővebben: JTAG bekötés
Eszközkezelőben 9600 baudrate, és a studio-ban is 9600-as a baudrate a JTAG csatlakozásnál...

Hol a hiba?
A hozzászólás módosítva: Nov 24, 2015
(#) TavIR-AVR válasza fifadani hozzászólására (») Nov 25, 2015 /
 
JTAG nem látni processzor.
A Chip original, vagy már volt használva? Ha volt, akkor lehet hogy a JTAG le van tiltva rajta(fusebit). Esetleg külső kvarcra állítva és nincs rajta/kondihiba (alapban belső 1 MHzről jár a chip)
(#) fifadani hozzászólása Nov 25, 2015 /
 
Volt már használva. De a JTAG be van pipálva, belső 1MHz-ről járt.
2 db m16-al is próbálkoztam, de mindkettőre ezt a hibaüzit kaptam.
(#) fifadani válasza fifadani hozzászólására (») Nov 25, 2015 /
 
STK500-al lehet vele beszélgetni, csak a JTAG nem akar valamiért... Az a bekötési rajz jó amit linkeltem?
Következő: »»   706 / 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