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   563 / 840
(#) karika200 válasza killbill hozzászólására (») Szept 20, 2013 /
 
4.7.2-es avr-gcc-t használok. Én úgy tudom, hogy ő már egyből linkel(és a tapasztalat is ezt mutatja), nem kell nekem külön linkert hívnom. De most ennek utána járok. Ha ez a kínja, akkor azt hiszem nem egy sörrel jövök.
(#) mps válasza karika200 hozzászólására (») Szept 20, 2013 /
 
Ja, ezen átsiklottam, odáig pedig nem jutottam.
(#) karika200 válasza karika200 hozzászólására (») Szept 20, 2013 /
 
Jó nyomon vagyunk pedig. Az avr-objcopy-nak adtam egy -j .data opciót is pluszba, mostmár a "tesztelés" stringből annyi átjött, hogy "tesztele" és utána egy rakat szemét. Itt márpedig a fordítás van leszúrva.
(#) csabeszq válasza karika200 hozzászólására (») Szept 20, 2013 /
 
Látod jó napom van. Gcc 4.3.3-at használok, de a makefile-t és a kódot azért felrakom.

Fordítsd le, ez legenerálja neked az assembly-t is .src kiterjesztéssel.

rs232.zip
    
(#) killbill válasza karika200 hozzászólására (») Szept 20, 2013 /
 
Tudsz mondani neki egy
avr-objdump -h thermonemtudommi.elf
parancsot. Abbol latni fogod a section-oket.
-d vel meg disassembly-t kapsz.
(#) karika200 válasza csabeszq hozzászólására (») Szept 20, 2013 /
 
Basszus, köszönöm. Megint tanultam valamit, több napos szívás árán. Köszönöm a segítséget!
(#) Szabi1 hozzászólása Szept 21, 2013 /
 
C nyelvbe a switch-case utasításnál adhatok olyat hogy :
  1. {
  2. case 23,42: // utasitas 1
  3. case 21,57: // utasitas 2
  4. }
(#) Topi válasza Szabi1 hozzászólására (») Szept 21, 2013 /
 
  1. case 23:
  2. case 42:
  3.  ...
  4.  break;
  5. case 21:
  6. case 57:
  7.  ...
  8.  break;
(#) Szabi1 válasza Topi hozzászólására (») Szept 21, 2013 /
 
Igen a break kell, de sajnos nem int tipusu szamokat akarok vizsgálni, hanem egész számokat, akkor maradjak az if nél?
Tulajdonképpen adc vel mért feszültség után az aksi állapotát mutatná ki százalékban, tehát 21,6v nál 0% ot kell megkapjon a percent nevű változó, 24v nál 100%
(#) killbill válasza Szabi1 hozzászólására (») Szept 21, 2013 /
 
A switch-case csak int tipus tud.
Idézet:
„de sajnos nem int tipusu szamokat akarok vizsgálni, hanem egész számokat”

Azt int az egeszet jelent (integer), gondolom, hogy tortet akartal irni, amire a C nyelvben float vagy double tipus van.

Azon felul a 23,42 az nem tört szam! A tizedes torteket ponttal irjak: 1.2.

De ugye nem 100 if-else aggal akasz megoldani egy kivonast es egy osztast?!
  1. if(voltage < min)
  2.  percent = 0;
  3. else
  4.  percent = (voltage - min) / (max - min) * 100.0;
  5.  
  6. // Ahol min a 0%-hoz tartozo feszultseg, max pedig a 100 szazalekhoz tartozo.

Ha ugyes vagy, akkor a float szamolast ki lehet hagyni, mert az A/D erteked is int, felesleges a float hasznalata. Mikrokontrolleren eleg 'draga' dolog.
(#) Fizikus válasza Szabi1 hozzászólására (») Szept 21, 2013 /
 
Ha a feszültség-akksi állapot lineáris, akkor ezt egyszerű matematikával kiszámolhatod (aránypár):

állapot(%) =100*(mértADC-ADC21V)/(ADC24V-ADC21V)

ahol ADC21V és ADC24V a 21.6V-nál és 24V-nál mért ADC érték.
(#) Szabi1 válasza Fizikus hozzászólására (») Szept 21, 2013 /
 
Bővebben: Link
  1. adc=ReadADC(1);
  2. volt=adc*5;
  3. print(volt);

igy jólvan elmentve volt változóba a mért feszültség?
(#) Fizikus válasza Szabi1 hozzászólására (») Szept 21, 2013 /
 
Az attól függ...
Az általad linkelt oldalon a beállításhoz ráad 5V-ot az ADC bemenetre, és addig taker egy potit amig 5V-ot nem mutat.
Az ACD 0-1023 közötti értéket ad, és 0-5V között tud mérni, ezért minden a mérendő feszültség leosztásától függ.
(#) csabeszq hozzászólása Szept 21, 2013 /
 
Na, túl vagyok életem legnagyobb AVR-es szívásán.
Letöltöttem egy low cost ethernet shield kapcsolási rajzát innen.

Ezek után bemegyek a ChipCad-be, megveszem a WE 7499010211A-es magjack ethernet csatlakozót, megtervezem a PCB-t, a DesignSparkban kiválasztom azt, hogy magjack csatlakozó és összekötöm a huzalokat. Maratom, fúrok, faragok, elkészül a mű, bekapcsolom és nem megy.

A vicc az, hogy ugyebár hiába van 8+4 lába annak a szerencsétlen csatlakozónak, hiába magjack, a gyártók úgy kötik be a lábakat, ahogy éppen jólesik. A DesignSpark csatlakozója egy megvalósítást tükrözött, de végülis miért ne kötné másik gyártó másképpen be ugyanazokat a lábakat.

Most már megy, tudok DHCP-zni, csak a panel alján 3 vezeték csüng, meg egy átvezető huzallal több lett.

A hozzászólás módosítva: Szept 21, 2013
(#) killbill válasza csabeszq hozzászólására (») Szept 21, 2013 / 1
 
Ez miert AVR-es szivas?
(#) csabeszq válasza killbill hozzászólására (») Szept 22, 2013 /
 
Jogos a kérdés. Végülis ha C64-en izzítottam volna be az ethernet kártyát (lehetséges), akkor ott szívtam volna vele.
(#) TavIR-AVR válasza csabeszq hozzászólására (») Szept 22, 2013 /
 
Nálam a tervezés mindíg úgy indul, hogy az alkatrész már a kezemben + adatlapja.
Az ENC-vel vigyázz!
- sok erőforrást elvesz a csomagfeldolgozás,
- sok csomag esetén az AVR nem bírja (Nálam kifagy: 2 ping + 2 böngészős oldallekérés). Kicsi az ENC memóriája!
A hozzászólás módosítva: Szept 22, 2013
(#) csabeszq válasza TavIR-AVR hozzászólására (») Szept 22, 2013 /
 
Igazából az egész egy játék volt. Kb. 3500-ból építettem meg a shield-et, de ha mikrokontrollert is tennék hozzá, akkor még 2000 Ft jönne rá járulékosan. Magyarul egy ethernetes áramkör elkészítése ebben a formában minimum 5500 Ft.

A Wiznet chippel az a bajom, hogy drága és felületszerelt. Egy ezressel megdobná a költséget, emellett pepecselhetnék az SMD-s forrasztással is hozzá.

Szóval, ha webszervert akarnék és nem csak fillérekből szórakoztatni magamat, akkor megvennék 8000-ért egy Raspberry Pi-t, aminek az internetes képessége messze túltesz az AVR-en és a Wizneten, miközben árban közel ugyanott vagyok.
(#) csabeszq válasza TavIR-AVR hozzászólására (») Szept 22, 2013 /
 
Viszont az érdekelne, hogy a 60% körüli packet loss is ezért van, vagy az más hiba?

Mindenesetre ha a chrome-ot kilököm leesik 40%-ra.
(#) csabeszq válasza csabeszq hozzászólására (») Szept 22, 2013 /
 
A helyzet az, hogy az ENC28J60-ban nincsen polaritásérzékelés és az én routerem fordított polaritással küldött. Mivel a panelen már úgyis össze-vissza lógnak alul a kábelek, minden mindegy alapon átforrasztottam és lám 0% adatvesztés.

Lehet ezt egyáltalán ilyenformán komoly dolgokra használni? Mi van, ha egy új router nem fordított polaritással küld?
(#) TavIR-AVR válasza csabeszq hozzászólására (») Szept 22, 2013 /
 
Komoly dolgokra én a W5100-t hazsnalom.
Az ENC eseten ha nem hyors az adatfeldolgozas illetve nem M328 van mellette, akkor elveszti a legtöbb program azt a funkciót, hogy adott csomagra valaszolni tudjon

Az ENC-t en ezert max relekattogtatasra ill. minimal-WEB kiszolgalasra merem rakni.

A RasPi eseten meg ott a gond, hogy az Linux és komplexebb.... És ahhoz meg nem (nagyon) értek még...
(#) Szabi1 hozzászólása Szept 23, 2013 /
 
Sziasztok! Valaki segitene elhárítani ezt a sok errort (még MCU programozásban kezdő vagyok)

main.c
    
(#) blackdog válasza Szabi1 hozzászólására (») Szept 23, 2013 /
 
Milyen szerkesztőt használsz?
  1. lcd_puts(“V”);
  2. helyett:
  3. lcd_puts("V");
Van pár ilyen karakter hiba.
Azért itt a szemeddel is gond van.
  1. DDRD|=((1<<PB0);
  2. helyett:
  3. DDRD|=(1<<PB0);
  4.  
  5. vagy pl.:
  6.  #include <lcd.h>
  7. helyett:
  8.  #include "lcd.h"

Egy csomó elütés. Előbb ezeket javítsd.
Ez mi?:
  1. bool charged;
  2. inkább:
  3. int charged;
A hozzászólás módosítva: Szept 23, 2013
(#) zsozsoX hozzászólása Szept 23, 2013 /
 
Sziasztok!
Küzdök egy Attiny45-el és már teljesen csupasz kóddal az a bajom, hogy gyorsan villog a led.
  1. int main(void)
  2. {
  3.  
  4.        
  5.         DDRB |= (1<<PINB2);
  6.  
  7.     PORTB |= (1<<PINB2);
  8.  
  9.  
  10. while(1) {
  11.          
  12.     }
  13.  
  14. return 0;
  15. }

Valaki esetleg tudna segíteni?
(#) vzoole válasza zsozsoX hozzászólására (») Szept 23, 2013 /
 
A 7 üres sor helyett inkább tedd be azt a részt, ami a LED-et villogtatná .
(#) TavIR-AVR válasza zsozsoX hozzászólására (») Szept 23, 2013 /
 
Wait vagy delay hiányzik.
Vagy a szemed már öreg és nem látja a 0.5...4 MHz-s villogást. Vagy a LED-ed határfrekije kicsi
(#) zsozsoX válasza vzoole hozzászólására (») Szept 23, 2013 /
 
A ledet nem villogtatni akarom, hanem csak simán világítson.Most villog kb. másodpercenként 4-5-öt.
(#) vzoole válasza zsozsoX hozzászólására (») Szept 23, 2013 /
 
Akkor viszont itt elbuktam, mert ennek nem kéne villognia.
LED-en átfolyó áram?
(#) kapu48 válasza zsozsoX hozzászólására (») Szept 23, 2013 /
 
Reset lábon felhúzó 10K és 100n hidegítő kerámia kondi van?
Tápfesz OK!
(#) zsozsoX válasza kapu48 hozzászólására (») Szept 23, 2013 /
 
Az ellenálás, kondi megvan tápfesz 5,04v, a leden az áramot nem tudom megmérni rendesen mert villog - így csak 2mA.
Következő: »»   563 / 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