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   125 / 840
(#) zacc válasza pici hozzászólására (») Máj 21, 2009 /
 
Sima portfigyelés és ki be kapcsolás allat nem igazán értem hogy mire gondolsz?
(#) TavIR-AVR válasza zacc hozzászólására (») Máj 21, 2009 /
 

Config Portc = Output
config pinb.1=input
portb.1=1
Config Timer0 = Timer , Prescale = 1024
On Timer0 , Vilog:
Enable Timer0
Enable Interrupts
Do
if pinb.1=1 then stop timer0 else start timer0
Loop
Villog:
Timer0 = 100
Toggle Portc.2
Return
(#) TavIR-AVR válasza zacc hozzászólására (») Máj 21, 2009 /
 
(#) zsuscsinyo hozzászólása Máj 21, 2009 /
 
Sziasztok!

Minden bizonnyal amatőr és egyszerű kérdéssel fordulok hozzátok, mégpedig az hogy 2 AVR-t SPI-n keresztül minden gond nélkül össze tudok úgy kötni, hogy MOSI > MISO (visszafele is), SCK>SCK? Még nem csináltam ilyet, és már nincsenek meg a fejlesztőpanelek, hogy ki tudjam próbálni.
Aki már csinált ilyet, kérem ossza meg a tapasztalatait, véleményét! Ez mennyire befolyásolja a programozásukat, esetleg ellenállással kössem össze az órajel- és adatbuszokat?
(#) vzoole hozzászólása Máj 22, 2009 /
 
Na ma már nem bírok tovább molyolni vele, bedobom ide hátha valaki rögtön meglátja a hibát.

ADC konvertálás
ATMega8
PC5/ADC5 lábra egy poti középső lába kötve, másik kettő +5V és test.

LCD kijelzőn próbálnám megjeleníteni az értéket, de semmit nem ír az = jel után.
(#) zsuscsinyo válasza vzoole hozzászólására (») Máj 22, 2009 /
 
Idézet:
„ADMUX = 01000000;”

Idézet:
„ADCSRA = 10000111;”



Ezeket ha jól látom binárisnak szántad, lehet ez az oka, jelenleg decimálisnak "hiszi".
(#) gtk válasza zsuscsinyo hozzászólására (») Máj 22, 2009 /
 
Igen, igy van.
  1. 0b
elotag kell neki!
(#) Cavalier hozzászólása Máj 22, 2009 /
 
Olyat szeretnék csinálni, hogy egy Attiny13-al hajtsak egy push-pull invertert. A freki az valahol 1-1,5kHz körül lehetne, sima hálózati trafót használnék, az könnyen beszerezhető.
Nagyobb frekin kisebb méretben meg lehetne oldani, viszont a szekundernek olyan 3-350V-ot kéne leadnia, sok menet kell rá, kicsiben az vékony drót, és macerás megtekerni. Meg lusta is vagyok.

Szóval, a kérdés az lenne, hogy a tiny13-al megoldható-e hardveresen a push-pull pwm meghajtás kis frekin? Tudtok-e esetleg valami jó leírást avr-pwm témakörben ami hülyéknek szól? Rám férne.
Szoftverből meg tudnám csinálni, sok más dolga nincs is a procinak, csak feszt mérni, meg időnként 1-1 impulzust kiadni, viszont mégiscsak elegánsabb lenne hardverből. A doksiját olvasgattam, de hiába, gyakorlatiasabb infó kéne.
(#) trudnai válasza gtk hozzászólására (») Máj 22, 2009 /
 
Azert eleg bugyuta dolog ez a 0b.... jelolesi modszer. Nem is ertem mert nem lehet egyszeruen hexaban megadni a szamokat, hisz nagyon egyszeru binarisbol hexaba atalakitani. Meg az oktalis jelolesi modszert is eleg furank tartom (talan egy fokkal meg nbugyutabb a 0b-nel is).

Na mindegy, azt tudja valaki, hogy az avr-gcc miert nem optimalizalja a bitfield-es bitmanipulaciokat ki? Tehat ha letre is hoznek egy bitfieldes deklaraciot az ADCSRA-ra, es igy hivatkoznek pl, hogy: ADCSRA.ADIE = 1; akkor abbol egy eleg borzalmas kod generalodik. Konkretan portokon probaltam ezt meg es ott a PORTB |= 1<<4; lefordul bitsetre mig a PORTB.b4 = 1; ossze vissza kodot csinalt. Letezik erre valami megoldas?>>
(#) zsuscsinyo válasza trudnai hozzászólására (») Máj 22, 2009 / 1
 
Régebben énis hasonló problémával küszködtem, de nem találtam más megoldást minthogy "VAGY"-olok a megfelelő bit-re egy 1-est, illetve "ÉS" művelettel az 1-es szám komplemensét. (8bit esetében 254: 0b11101111)

speciel így:

PORTB.b4 = 1;
  1. PORTB |= (1<<4);



PORTB.b4 = 0;
  1. PORTB &= ~(1<<4);

(#) vzoole válasza zsuscsinyo hozzászólására (») Máj 22, 2009 /
 
Köszi

Ott volt a hiba, lehet sose találtam volna meg

ui.: bocsi a hosszú kódért, eszembe se jutott, hogy mellékletbe is betehetném.

(#) trudnai válasza zsuscsinyo hozzászólására (») Máj 22, 2009 /
 
Nem problema ez nekem, csak csunya Es azonkivul nem ertem, hogy a gcc hogy kepes ezt jobban optimalizalni, mint a bitfieldet? Valahogy az az erzesem ez egy csunya hack lehet a gcc forrasaban, de majd megnezem...
(#) gtk válasza trudnai hozzászólására (») Máj 22, 2009 /
 
Bugyuta, igaz es nem is szabvany C, de atlathatobb. Regebben en is hexaban irtam, de miota rajottem hogy tudja az avr-gcc ezt, binarisan irom.(Korabbi avr-gcc nem tudta, azt meg en forgattam volt linux ala, lehet lemaradt valami es azert ..?)

Atribute packed -el probaltad?
Itt volt szo rola egyszer Bővebben: Link
(#) gtk válasza Cavalier hozzászólására (») Máj 22, 2009 /
 
Mekkora aram kell? Ha csak nehany mA, akkor nagyfesz push pull-ra ott a nixi orak kapcs uzemu tapja (visszacsatolast modositani kell). Ha nagyobb aram kell, szerintem jobban jarsz egy TL494 PWM ICvel, Lasd az adatlapban a 12-30V push pull peldat. (modositva)
(#) trudnai válasza gtk hozzászólására (») Máj 22, 2009 /
 
Koszi, megnezem majd. Par honapja jatszadoztam el ezzel es akkor valamiert nekem nem SBI CBI lett az eredmeny, tehat odaig el sem jutottam, hogy mekkora a fogalalsi meret stb... De akkor ujra megnezem -- lehet azota faragtak a forditon is.

Koszi a tippet!
(#) Cavalier válasza gtk hozzászólására (») Máj 22, 2009 /
 
Nem nagy áram, pár W-ról van szó csak. Az a helyzet, hogy egyszerűsíteni akarom a dolgot, minél kevesebb alkatrészből megoldani, a tiny13 pont jó lenne a feladatra ha rádobok két logic level fet-et, kis frekin nem is annyira sarkalatos a meghajtó áramkör, meg nem kell ferritmagos tekercset tekernem hozzá. Villanypásztorról van szó amúgy, másodpercenként egyszer fel kell tölteni egy 4-30 mikrós kondit 500V-ra, ha kész van, akkor meg begyújtani egy tirisztort, mérni az akkufeszt, ha merül, akkor ritkítani az impulzusokat, végül kikapcsolni teljesen, ha adott érték alá ment. Persze meg tudom oldani analóg módon is, meg tl494-el, de jóval egyszerűbb így. Akkus üzemnél a hatásfok se mindegy.
(#) zsuscsinyo válasza vzoole hozzászólására (») Máj 22, 2009 /
 
Nincsmit Nekem kifejezetten semmi bajom a hosszú kódokkal, sőt lehet hogy elleshetek egy két trükköt az ügyesebbektől
(#) vzoole hozzászólása Máj 22, 2009 /
 
Na sikerült is elrontani

mega88
Fuse biteknél az AVR studioba beállítottam:
Ext. Low-Freq Crystal;

Ezután megszünt a kapcsolatom az AVR-el.
Próbáltam segédórajellel, de nem ment azzal se, vagy nem jól csináltam valamit.

Rákötöttem az OSC1-re a jelet, mértem, megvan.
Ki kéne venni a kvarcot?
(#) zsuscsinyo válasza vzoole hozzászólására (») Máj 22, 2009 /
 
Próbáld meg, hogy addig órakvarcot teszel bele.. elvileg kellene mennie.
(#) vzoole válasza zsuscsinyo hozzászólására (») Máj 22, 2009 /
 
Na közbe a számítógépem is meghalt (a másik)

Óra kvarccal elindult az AVR, látom hogy megy a kijelző, csak iszonyat lassú a multiplexelés

De a Topi féle programozó így sem éri el, vagy nem jól használom.
(#) zsuscsinyo válasza vzoole hozzászólására (») Máj 22, 2009 /
 
Ha jól rémlik van azon egy Jumper, javítsatok ki ha tévedek de az nem a lassabb órajelhez van?
(#) vzoole válasza zsuscsinyo hozzászólására (») Máj 22, 2009 /
 
Igen van, rá is tettem, semmi változás nem lett.
Vagy akkor már nem avr studióból kéne programozni, habár felismerte a programozót?

Nem találtam semmi konkrétat az alacsony sebességű programozásról.


(#) zsuscsinyo válasza zsuscsinyo hozzászólására (») Máj 22, 2009 /
 
Közben megoldódott a problémám, szóval már nem kell vele foglalkozni. Bújtam az adatlapot, és építettem 2 fejlesztőpanelt, majd kísérleteztem és közben rengeteg mindent megtanultam az SPI buszról.
(#) TavIR-AVR válasza vzoole hozzászólására (») Máj 23, 2009 /
 
A külső órajel max. 1/4-ével lehet prograozni, azaz a SCK lábon ennyi lehet.
A Nquist szabály alapján az órajel max 40%-s...
(#) vzoole válasza TavIR-AVR hozzászólására (») Máj 23, 2009 /
 
Most egy 32,768 KHz-es kvarc van a készülékbe.

Próbáltam AVRStudio-ban programozni úgy, hogy rátettem a SLOW_CLK jumpert és a programozó ablakban az ISP frekvenciát 4 KHz-re állítottam.
(próbáltam 8 KHz, 1 KHz-el is)

De nem találja meg a processzort a programozó.

Leszedtem 3 féle windows-os AVRDude-t is.
Csak az egyikben volt AVR Doper programozó, de abban sem sikerült.
Még a programozót se látta.

Már nincs több ötletem... hacsaknem STK 200 lesz belőle, de a gépemen meg nincs párhuzamos port
(#) Topi válasza vzoole hozzászólására (») Máj 23, 2009 /
 
SLOW_CLK jumpert fel és utánna programozó kihúz-bedug.

Ha rajta van helyesen a kristály akkor mérj rá az XTAL1 és XTAL2-re. Fut-e egyáltalán a processzorod oszcillátora.
Ha nem, akkor XTAL1-nél lévő kondi helyére tegyél egy 5-10 pF-os kerámiát, a XTAL2-re meg egy olyan 22pF környékit.
Az órakvarcok kapacitása olyan 5-12pF között van, ezért lehet hogy a 22 vagy 33pF-os kondi már sok. Ha így sem, akkor fordítsd meg.
4 KHz-en már nem tudsz biztosíték biteket írni azt hiszem, az AVR Studio tiltja le.

AVRDude-al pedig ne HID módban, hanem sima soros módban próbáld.

avrdude -p m88 -P COMx -c stk500v2 -U hfuse:r:hfuse.txt -U lfuse:r:lfuse.txt -v -v

-v-vel Verbose módba, kettő -v -v -vel meg nagyon-nagyon beszédes módba kapcsolod. Akkor mindent, még a szinkron hibát is kiírja.

Emlékezetből írtam, elvileg jónak kell lennie. Én automatizált programozáshoz parancssorból hívott avrdude-ot használok és a saját programozóval. Szóval mennie kell. De arra figyelj, hogy lépj ki az AVRStudióból ha avrdude-al játszol, mert az AVRStudio nagy valószínűséggel fogja a com portot!

Szerk: Meg ugye előtte kikapcsoltad a CKDIV8-at.
(#) vzoole válasza Topi hozzászólására (») Máj 23, 2009 /
 
Köszönöm a választ.

Igen az volt az első, hogy kikapcsoltam a CKDIV8-at.
Aztán sikrült alacsony frekire állítani.

A proci az fut, megy rajta a program, megy a kijelző is.
Mértem is, megy az oszcillátor (habár a 22p kondik maradtak rajta).

stk500v2 módban már elértem windows-os felületen a programozót, de olvasákor ezt a hibaüzenetet kaptam:

avrdude.exe: stk500v2_command(): command failed
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude.exe done. Thank you.

Mindjárt megpróbálom prompt-ból is ahogy írtad.

Mod: Mehpróbálom amit rájövök hogy tudnám elindítai az avrdude.exe-t, mert ha futtatom akkor csak egy pillanatra villan be az abla és el is tünik.


(#) vzoole válasza vzoole hozzászólására (») Máj 23, 2009 /
 
Közbe rájöttem, hogy kell prompt-ból csinálni.
De a 4. féle gui-avrdude programban meg lehet adni paramétereket is.

Mind dos ablakban, mind win-es ablakban ezt írta nekem:

avrdude.exe: Version 5.4, compiled on Jul 15 2007 at 12:37:51
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

System wide configuration file is "C:\Documents and Settings\VZ\Asztal\AVRdude\avrdude.conf"

Using Port : com3
Using Programmer : stk500v2
AVR Part : ATMEGA88
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 5 4 0 no 512 4 0 3600 3600 0xff 0xff
flash 65 6 64 0 yes 8192 64 128 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : STK500V2
Description : Atmel STK500 Version 2.x firmware
Programmer Model: STK500
Hardware Version: 1
Firmware Version: 2.04
Topcard : STK501
Vtarget : 4.6 V
Varef : 0.0 V
Oscillator : 1.229 MHz
SCK period : 2.2 us

avrdude.exe: stk500v2_command(): command failed
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude.exe done. Thank you.

Gondolom ez nem jelent jót: Oscillator : 1.229 MHz

ezt hol lehet állítani?

ui.: rajta van a SLOW_CLK jumper, de ha leveszem is ugyanez jön ki.
(#) Topi válasza vzoole hozzászólására (») Máj 23, 2009 /
 
Ne telepíts mindenféle AVRDude-okat. Használd azt ami a WinAVR-ben van. Mivel az alap rendszer path-ban benne van a WinAVR, ezért bárhonnan path nélkül meghívhatod az AVRDude-ot. WinAVR bin könyvtárában.

A SlowSCK önmagában kevés, mert az a rendszer órajelhez kellhet. Az oszcillátor pedig teljesen más. Az az órajel generátora a programozónak. De neked az SCK periódust kell nézned. Ez 2,2 uS tehát ~ 450KHz.

Neked "-i" kapcsoló kell a delay-hez. Ha 32,768 KHz a proci órajele, akkor ez max 8 KHz azaz legalább 125-150 uS kell.
Azaz "-i 150" merthogy uS-ben kell megadni a paramétert.
(#) vzoole válasza Topi hozzászólására (») Máj 23, 2009 /
 
Na most a WinAVR-ben található AVRdude-t használtam és beletettem az "i 150" kapcsolót is, de még mindig nem megy...

SCK period nem változott...
Terminal Mode Operation fejezetben van erről valami írva, most azt fordítom.

------------------------------------------------------------------------------------------------------
D:\Prog\WinAVR\bin>avrdude -p m88 -P COM3 -c stk500v2 -U hfuse:r:hfuse.txt -U lf
use:r:lfuse.txt -v -v -i 150

avrdude: Version 5.6cvs, compiled on Nov 10 2008 at 17:15:38
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

System wide configuration file is "D:\Prog\WinAVR\bin\avrdude.conf"

Using Port : COM3
Using Programmer : stk500v2
Setting isp clock delay : 150
avrdude: stk500_2_ReceiveMessage(): timeout
AVR Part : ATMEGA88
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page
Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW Max
W ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ---
-- ---------
eeprom 65 5 4 0 no 512 4 0 3600 36
00 0xff 0xff
flash 65 6 64 0 yes 8192 64 128 4500 45
00 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 45
00 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 45
00 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 45
00 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 45
00 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0
0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0
0 0x00 0x00

Programmer Type : STK500V2
Description : Atmel STK500 Version 2.x firmware
Programmer Model: STK500
Hardware Version: 1
Firmware Version Master : 2.04
Topcard : STK501
Vtarget : 4.6 V
SCK period : 2.2 us
Varef : 0.0 V
Oscillator : 1.229 MHz

avrdude: stk500v2_command(): command failed
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): cannot get connection status
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.


avrdude done. Thank you.
Következő: »»   125 / 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