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   273 / 839
(#) Ricsi89 hozzászólása Okt 31, 2010 /
 
Most viszont én is elakadtam. Attiny24 és DS32C35-ös RTC IC van összekötve(adatlap mellékelve). A gond ott van, hogy nem tudok dátumot beleírni és visszaolvasni. Az időt azt simán bele tudom írni, és olvassa is szépen, de a dátumra semmit nem csinál. VFD kijelző van bekötve, a dátumot kiolvasom és 255-öt ad vissza. Az RTC tápjával sorban van egy led, mivel az attiny 5V-ról jár, az RTC pedig 3,3V-ról. Így a led villan, amikor kommunikál a két eszköz, egyébként éppen hogy nagyon halványan világít. Ez az idő olvasásnál szépen látszik is, de a dátumnál semmi nincs. Mintha a proci nem is akarna kommunikálni. Itt a kódrészlet is ,amivel kiolvasom a dátumot.
  1. void datum(){
  2.  
  3.         int ev1, honap1, nap1;
  4.  
  5.         //hét napja
  6.         i2c_start(0b11010001);
  7.         i2c_write(0x03);
  8.         hetnap=i2c_readNak();
  9.         i2c_stop();
  10.  
  11.         //hónap napjai
  12.         i2c_rep_start(0b11010001);
  13.         i2c_write(0x04);
  14.         nap1=i2c_readNak();
  15.         i2c_stop();
  16.  
  17.         //hónap
  18.         i2c_rep_start(0b11010001);
  19.         i2c_write(0x05);
  20.         honap1=i2c_readNak();
  21.         i2c_stop();
  22.  
  23.         //év
  24.         i2c_rep_start(0b11010001);
  25.         i2c_write(0x06);
  26.         ev1=i2c_readNak();
  27.         i2c_stop();
  28.  
  29.         nap=((nap1>>4)*10 + (nap1 & 0x0F));
  30.         honap=(((honap1>>4) & 0xFB)*10 + (honap1 & 0x0F));
  31.         ev=((ev1>>4)*10 + (ev1 & 0x0F));
  32.        
  33. }

Mi lehet a gond? Tegnap akartam megcsinálni, hogy magától átálljon az óra az átálláskor, de nem jött össze.
(#) Reggie válasza Ricsi89 hozzászólására (») Okt 31, 2010 /
 
A PINB akkor is irhato, ha kimenetre van allitva az adott lab. Amelyik bit helyere egyest irsz, azon a biten meginvertalja a kimeneti erteket.
(#) Ricsi89 válasza Reggie hozzászólására (») Okt 31, 2010 /
 
Igen, de a kimenetek állítására akkor is a PORTB-t szokás használni általában.
(#) Reggie válasza Ricsi89 hozzászólására (») Okt 31, 2010 /
 
Ertem mar. En a kommentet sosem olvasom el, mivel a mikrokontroller sem azt ertelmezi De valoban a komment es a kod nem all pariban.
(#) trudnai válasza Reggie hozzászólására (») Okt 31, 2010 /
 
Idézet:
„En a kommentet sosem olvasom el, mivel a mikrokontroller sem azt ertelmezi”


Noha ebben tokeletesen igazad van, a kommenteknek megis fontos szerepuk van a szoftver fejlesztesben. Egy orok veszekedes a szoftver minoseg ellenorok es a kodolok kozott, hogy mi a kommentek szerepe, de ime egy tipp:

A kommeteknek kell leirniuk, hogy a kodnak mit kellene csinalnia. A kod pedig ha nem azt csinalja, akkor hibas! Tehat a komment a mervado
(#) Reggie válasza trudnai hozzászólására (») Okt 31, 2010 /
 
Teny, de en ezt a fuggveny ele irom, soronkent semmi ertelme sincs a kommentnek, mivel egy sort mindenki tud ertelmezni. A soronkenti kommenteles szuksegessege egyfajta osszenepi teveszme a kezdo programozott kozott es ezenfelul oriasi pazarlas, mert ahanyszor atirod a sort irhatod at a kommentet is, vagy egy ido utan a kommentnek nem lesz koze az adott sorhoz, igy talalgathatsz, hogy melyik a rossz.
(#) trudnai válasza Reggie hozzászólására (») Okt 31, 2010 /
 
Igen, a teveszme az, hogy le kell irni mit csinal az utasitas -- az valoban csak a kezdoknek szol. Abban is igazad van, hogy ha a forras kellokeppen tagolt, akkor egy fugveny csak kis dolgot muvel, igy csak a fuggvenyt kell kommentezni. Ha azonban ez nem igy tortenik akkor vagy a tagolason kell valtoztatni vagy sorok koze szurt megjegyzesekkel kell feloldani a problemat.
(#) HDD hozzászólása Okt 31, 2010 /
 
Sziasztok
Most kezdtem az AVR foglalkozni
A programozom meg is, van AVR910 (Szilva)
A PIC-nél tudom, hogy melyik lábra mennek a programozó ICSP vezetékei, de az AVR nél nem
Eben szeretnék segítséget kérni
Mondjuk egy rajz vagy valami ilyesmi
(#) FerrGhini hozzászólása Okt 31, 2010 /
 
Valakinek lenne valami ötlete, hogy Bascom-ban íródott programban arra, hogy kikapcsolás után is megtartsa a program egy változó értékét?


Please!
(#) zolee1209 válasza FerrGhini hozzászólására (») Okt 31, 2010 /
 
Szia!
Belső EEPROM?
(#) Ricsi89 válasza Ricsi89 hozzászólására (») Okt 31, 2010 /
 
Az én kérdésemre valaki valamit?
(#) FerrGhini válasza zolee1209 hozzászólására (») Okt 31, 2010 /
 
Csak nem tudom azt hogyan kell....
(#) Ricsi89 válasza FerrGhini hozzászólására (») Okt 31, 2010 /
 
Adatlapban van példa olvasásra és írásra is. Épp pár napja foglalkoztam ilyennel. Nézz bele a vezérlő adatlapjába, ott is az eeprom részhez. Ott lesz benne a kész kód, amit csak be kell másolnod a programodba és azt és akkor írsz és olvasol, amit csak akarsz.
(#) FerrGhini válasza Ricsi89 hozzászólására (») Okt 31, 2010 /
 
Köszi csak sajna annyi a baj, hogy én csak Basic nyelven "beszélek"
(#) Ricsi89 válasza FerrGhini hozzászólására (») Okt 31, 2010 /
 
Akkor egy link. Gondolom Bascomban programozol. Itt van leírás az eeprom használatáról basicben. Bővebben: Link
Sajnos az oldalnak csak a tárolt verziója van meg.
(#) (Felhasználó 56240) hozzászólása Nov 1, 2010 /
 
Sziasztok
Elkészült az AVR910 programozom fel is, programoztam az ATTiny2313-mat
Az első indításnál már világítót halványan az LED6 a sárga
Ez valami zárlat vagy rosszabb?
(#) Thomm hozzászólása Nov 1, 2010 /
 
Üdvözletem.
A következő problémába ütköztem,
építenék egy motorvezérlőt 3 funkcióval, elsőnél a motor áll, másodiknál a motor forog folyamatos, míg a harmadiknál a motor forog míg egy résoptótól jelet nem kap, ekkor megáll egy potival megadott, adc1-en beolvasott értékig és aztán továbbmegy az optó következő jeléig.
A HW késsz, ellenőrizve milliószor, a programmal viszont elakadtam:

[code=c]
$regfile = "m8def.dat"
$crystal = 1000000

Config Portb.1 = Output 'Motor
Config Pinc.5 = Input 'Optikai kapú
Config Pinc.4 = Input '3 állású 1 állás OFF
Config Pinc.3 = Input '3 állású 2 állás FOLYAMATOS SCROLL
Config Pinc.2 = Input '3 állású 2 állás Képekig Scroll
Config Portc.0 = input 'poti 1 idő

'Config Adc = Single , Prescaler = Auto , Reference = Avcc 'adc
'Start Adc


'Dim Q As Word , Channel As Byte 'adc változója
'Channel = 1

Do

' Q = Getadc(channel)


If Pinc.4 = 1 Then
Portb.1 = 1
If Pinc.2 = 1 Then
Wait 1
While Pinc.5 = 1
Waitms 100
Wend
Portb.1 = 0
'Wait Q
Wait 5
End If

End If

Loop

Az q-hoz érve kifagy az egész, ezért q helyett fix 5mp-et adtam meg és csodák csodája, hibátlanul lefut. Illetve majdnem de ez másodlagos.

Kiollózva az adc-s részeket készült egy kis tesztprogi:

$regfile = "m8def.dat"
$crystal = 1000000

Config Portb.1 = Output 'Motor
Config Pinc.5 = Input 'Optikai kapú
Config Pinc.4 = Input '3 állású 1 állás OFF
Config Pinc.3 = Input '3 állású 2 állás FOLYAMATOS SCROLL
Config Pinc.2 = Input '3 állású 2 állás Képekig Scroll
Config Portc.0 = input 'poti 1 idő

Config Adc = Single , Prescaler = Auto , Reference = Avcc 'adc
Start Adc


Dim Q As Word , Channel As Byte 'adc változója
Channel = 1 'adc csatorna megadása


Do



Q = Getadc(channel)


Portb.1 = 1
Waitms Q
Portb.1 = 0
Waitms Q


Loop

ez is működik tökéletesen, együtt a kettő viszont nem hajlandó lefutni. Vajon mi lehet a probléma?
(#) Reggie válasza HDD hozzászólására (») Nov 1, 2010 /
 
Az IC-hez tartozo adatlap "Memory Programming" fejezet "Serial Downloading" alfejezeteben van leirva.
(#) Reggie válasza Ricsi89 hozzászólására (») Nov 1, 2010 /
 
Probaltad ugy is, hogy normal 3.3V-os tapot adsz neki? (Amugy mekkora a LED nyitofeszultsege?)
(#) Reggie válasza (Felhasználó 56240) hozzászólására (») Nov 1, 2010 /
 
Egy kicsit pontosabban is leirhatnad, hogy mi tortent, es milyen aramkorben van az ATtiny2313, mert igy tul keves az informacio ahhoz hogy barki segiteni tudjon.
(#) v alaki hozzászólása Nov 1, 2010 /
 
Sziasztok,

A melléklet kód egy kicsit kusza, (a hibakeresés miatt már mindenféleképpen átvariáltam.) de amit csinálna az igen egyszerű, lábakat kellene szépen 5V-ra húzni.

Az első fele az irányregiszter beállítással nincs is gond, a gond a második résszel van.
Ha nem látom szimulátorban, akkor nem hiszem el. Amíg adott porton belül beállítom a megfelelő lábat nincs is semmi gond, de amikor elkezdek egy másik portot írni, AZ ELŐZŐ PORT LÁBAIT LENULLÁZZA!

A mások portba történő átlépéskor "elfelejti" a beállítást?
Milyen beállítás van elrontva???
A bosszantó, hogy a program többi RS232-es része ADC-vel megy dalolva, egy lábat meg nem tudok beállítani?

  1. DDRB |= (1 << PINB5);           // PORT irány beállítása kimenet
  2.         DDRD |= (1 << PIND4);           // PORT irány beállítása kimenet
  3.         DDRD |= (1 << PIND7);           // PORT irány beállítása kimenet
  4.         DDRC |= (1 << PINC3);           // PORT irány beállítása kimenet
  5.         DDRC |= (1 << PINC2);           // PORT irány beállítása kimenet
  6.         DDRB |= (1 << PINB3);           // PORT irány beállítása kimenet
  7.         DDRB |= (1 << PINB4);           // PORT irány beállítása kimenet
  8.  
  9.         DDRC &= ~(1<< PINC0);
  10.  
  11.         PINB |= (1 << PINB5);  
  12.         PIND |= (1 << PIND4);  
  13.         PIND |= (1 << PIND7);          
  14.         PINC |= (1 << PINC3);  
  15.         PINC |= (1 << PINC2);  
  16.         PINB |= (1 << PINB3);  
  17.         PINB |= (1 << PINB4);


Van remény???
Előre is köszi!
(#) Reggie válasza v alaki hozzászólására (») Nov 1, 2010 /
 
Hogy erted, hogy az elozo port labait lenullazza? Mibol latod ezt?
(#) Ricsi89 válasza Reggie hozzászólására (») Nov 1, 2010 /
 
Az a vicc, hogy az időt simán tudom állítani, meg azt egyébként is mindig olvassa és eddig még nem volt gondom vele, de azért megtáplálom majd 3,3V-ról.
(#) Reggie válasza Ricsi89 hozzászólására (») Nov 1, 2010 /
 
Sosem tudhatod hogy az IC melyik resze erzekenyebb a tapfeszultsegre... De a led utan legalabb rakjal hidegito es lehetoleg egy nagyobb (1uF) koruli kondit az RTC tapjara, hogy az adatatvitel es muvelet vegrehajtas miatti megnovekedett aramfelvetel ne okozzon olyan nagy zajt. Ha az AVR-t 5V-rol taplalod, akkor a komparalasi szint a magas bemeneti ertekhez min. 3V, ugyhogy hataron vagy erosen. Egy nagyobb tapzaj eseten mar atviteli hibak keletkezhetnek.
(#) v alaki válasza Reggie hozzászólására (») Nov 1, 2010 /
 
Ja bocs, néhány fontos infó lemaradt a hajtépés közben...

AVR Studio 4 -el nézem lépésről lépésre
ATMEGA8

Már kiirtottam mindent az eredeti kódból, és ez maradt. Ezt léptetem a képernyőn.
A DDRx regiszterek négyzetei szépen feketednek lépésről lépésre, és úgy is maradnak.
A PINx regisztereknél jön elő, hogy pl az Első PINB-t beírja, majd amikor beírja a PIND elsőjét a PINB-t letörli. Amikor a második PIND-t is beírom, és átlépek a PINCre, na akkor a két PIND veszik el, és így a többi-vel.
A végén a két PINB marad "állva" mert utánuk már nrm írok mást.
???
(#) Reggie válasza v alaki hozzászólására (») Nov 1, 2010 / 1
 
A PINx regiszterek ATmega8-ban csak olvashatoak (nincs toggle funkcio) es igy mindig az I/O lab aktualis allapota olvashato ki belole. Ha a kimenet allapotat meg szeretned valtoztatni, akkor a PORTx-et kell irnod. Mivel PINx-et irtal, igy nem valtozik a kimenet, ezert nem valtozik az ertek.
(#) v alaki válasza Reggie hozzászólására (») Nov 1, 2010 /
 
Köszi ott a pont...

Viszont pofátlan a kérdés, de ez hol van az adatlapban?
Most nézem egy ideje, de nem találom..
(#) Reggie válasza v alaki hozzászólására (») Nov 1, 2010 /
 
51-53 oldal.
(#) v alaki válasza Reggie hozzászólására (») Nov 1, 2010 /
 
Köszi meg van.
Bár ha apró betűs, akkor jobban észre vettem volna

Idézet:
„The Port Input Pins
I/O location is read only, while the Data Register and the Data Direction Register are read/write.”

Az érdekes, hogy így semmi értelme sincs (írni), még sincs kitiltva.
ez kell a kezdőknek...
(#) Reggie válasza v alaki hozzászólására (») Nov 1, 2010 /
 
Hat semmilyen iras/olvasas sincs kitiltva. Amelyik cim befer a cimtartomanyba, azt meg is lehet cimezni. Ehhez mar MPU/MMU kellene. Ha ilyen igenyeid vannak ajanlom az AVR32 architekturat. Mondjuk amugy is ajanlom, mert kb ugyan ennyibe kerul AT32UC3L szeria, cserebe sokkal tobbet tud, es gyorsabb is. Valamint Neumann architekturaju, ami sok mindent leegyszerusit.
Következő: »»   273 / 839
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