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   325 / 840
(#) Tidzs válasza sikolymester hozzászólására (») Máj 17, 2011 /
 
Köszi a tippeket! A bementen egyébként egy erősítés kapcsolás kimenete van, és hiába hitetlenkedtem, hogy ott nem lehet akkora zavar mégis kell hogy legyen, mert potival kicsit feljebb tolva a kimeneti offsetet megszűnnek az interruptok.

Köszi a segítséget.
(#) tursaba hozzászólása Máj 18, 2011 /
 
Ha ez sem sikerül átküldenem, feladom.
  1. ADCSRA |=(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
(#) augre hozzászólása Máj 19, 2011 1 /
 
sziasztok!

Nagy hétszegmensű kijelzőket készítettem a csatolt képen látható alapelv szerint.

A kapcsoló szerepét egy atmega8 tölti be.

Ameddig a programozórol kapja a mikrovezérlő az öt voltot addig gyönyörűen működik.

Viszont mivael 220-ról -->adapter-->12V-->ledek.

A 12V-ból csinálnék 5V-ot az avr-nek.
7805-össel.

bekötöm a 7805 kimenetét, amit leellenőriztem, h. 5V.
És nagyon melegszik a stabilizátor, de működik a kijelző.

hosszabb ideig nem próbáltam mert szerintem elfüstölne

Előre is köszönöm a válaszokat.
(#) trudnai válasza augre hozzászólására (») Máj 19, 2011 /
 
Szia!

A 7805 elmelegiti a felesleget, ezert melegszik neked fel. Nem tudom mennyi az aramkorod aramfelvetele, de ugye 12-5 tehat 7V-tal kell kiszamolnod mekkora teljesitmenyt kell szerencsetlennek diszcipalnia. Vagy tegyel ra eg hatalmas hutobordat, vagy oldd meg egy olyan stabilizatorral ami kapcsolo uzemu.
(#) sikolymester válasza augre hozzászólására (») Máj 19, 2011 /
 
Nem egészen értem, hogy mi a megfogalmazott kérdésed. Kérlek írj egyértelműbben.
(#) tursaba hozzászólása Máj 19, 2011 /
 
Segítséget szeretnék kérni. Mikroelektronika C program, Atmega128 AD konverzióval, IT alatt, valamit elszúrok.
A kijelző prg. jó, mert az ADC_Read(0) (most kommenttel kizárva) által kapott érték korrekt.
Nagy valószínűséggel az inicializálás körül van hiba, vagy IT alatt a két AD regiszter kiolvasásával.
Ez persze csak tipp.
Köszönök minden segítséget.

AD_konv.c
    
(#) tursaba válasza augre hozzászólására (») Máj 19, 2011 /
 
Mennyi a maximális áram az 5V-os stabilizátor kimenetén ?
(#) zolee1209 válasza tursaba hozzászólására (») Máj 19, 2011 /
 
Szia!

A C-hez igencsak keveset konyítok, így lehet, nem valósat fogok mondani. De nekem az tűnt fel, hogy:
  1. adc_be |= ADCL;
  2.        temp = ADCH;
  3.         adc_be |= (temp <<8);       // 2 byte-ot 1 integerbe

Itt először az ADCL-t olvasod, majd az ADCH-t... Legjobb tudomásom szerint, a két bájtos regisztereket a felső (H) regiszter olvasásával kell kezdeni. Valami rémlik, hogy nekem is emiatt lett volna problémám egy kódban. Persze ez csak egy tipp... Aki C-ben jártas, majd megmondja, mi lehet valójában a gond.
(#) Ricsi89 válasza zolee1209 hozzászólására (») Máj 19, 2011 /
 
Nem is hülyeség. Múltkor pont ilyesmiről volt itt szó. Csak vissza kellene olvasni pár oldalt. De ezt tegye meg a kérdező.
(#) augre válasza tursaba hozzászólására (») Máj 19, 2011 /
 
Elméletileg csak a processzor áramfelvételét kell fedezni.
Pontosan nemtudom mennyi lehet de szerintem pici.

valami nem jó mert nagyon melegszik
(#) Ricsi89 válasza augre hozzászólására (») Máj 19, 2011 /
 
A két áramforrás testje között miért van ellenállás? Nem bázisellenállást akartál te berakni? Így ez nem a legjobb.
(#) trudnai válasza augre hozzászólására (») Máj 19, 2011 /
 
Meg kell merni a 'pici'-vel nem lehet szamolgatni... nem is beszelve arrol, hogy kinek mi a pici...

7805 ele tegyel be diodakat sorban. Max 8 db, de azon belul akarhany, minel tobb, annal jobb. Nem mondom, hogy egy mernoki megoldas, de lehet pillanatnyilag segit a problemadon...
(#) Fizikus válasza zolee1209 hozzászólására (») Máj 20, 2011 /
 
Az AVR belso felepitese miatt mindig az ADCL-t kell eloszor kiolvasni esutana az ADCH-t.
  1. ADCmeres = (ADCL | ADCH<<8);

Bővebben: Link
(#) tursaba válasza Ricsi89 hozzászólására (») Máj 20, 2011 /
 
A kérdező visszaolvasta már korábban. 5x. Nem lustaságból írtam a fórumra. Az inicializálás sorrendjét több talált verzió szerint kipróbáltam, de nem találtam eddig biztosan működőt. Köszönöm fizikus egysorosát. Kipróbálom. Hátha ez a tuti!
(#) trudnai válasza zolee1209 hozzászólására (») Máj 20, 2011 /
 
Itt:

  1. adc_be |= ADCL;
  2.     temp = ADCH;
  3.     adc_be |= (temp <<8);       // 2 byte-ot 1 integerbe


en szerintem csak annyi a gond, hogy az adc_be nincs nullazva ily modon. Tehat csak annyit kellene tenni, hogy kivenni az OR muveletet:

  1. adc_be = ADCL;
  2.     temp = ADCH;
  3.     adc_be |= (temp <<8);       // 2 byte-ot 1 integerbe


Masik gond pedig az lehet, hogy ha igy interruptbol szeretned azt a valtozot (adc_be) valtoztatgatni, amit a foprogramban lekerdezgetsz, akkor annak 'volatile'-nak kell lennie! tehat az adc_be-t igy kellene definialni:

  1. volatile unsigned int adc_be = 0;
(#) tursaba válasza trudnai hozzászólására (») Máj 20, 2011 /
 
fizikus egysorosa igaz frappáns, de nem oldotta meg.
(mindig tanulok)
A változó, volatile ..... után korrekt a konverzió, de csak minden reset után 1x konvertál.
Az inicializálással tanácstalan vagyok, mert először az alapmódokat (Ain, clk ), majd IT-k és start állítom be, amit jónak gondolok. A Free Run-t kivettem, mert az IT végén indítom újra a Conversion Start-al.
Igaz, hogy először az ADCL-t, majd az ADCH-t kell beolvasni, mert az ADCL olvasás nem enged felülírást az ADCH-ra. Így nem két egymást követő konverziót olvasok ki eltérő H és L regiszterértékekkel, de itt a sorrend miatti hiba az IT alatt ez kizárt.
Korábban mindkét sorrendet kipróbáltam.
C alatt kevesen használnak IT hívásokat ?
(#) trudnai válasza tursaba hozzászólására (») Máj 20, 2011 /
 
Dehogynem, csak Te valahogy faramuci modon oldottad meg:

  1. void analog_be () org IVT_ADDR_ADC   // AD interrupt kezelés
  2.  {


Igy kellene valahogy:

  1. #include <avr/interrupt.h>
  2.  
  3. ISR(ADC_vect)
  4. {
  5.     // user code here
  6. }


Amugy a volatile-al kellene mukodnie az egysorosnak is, sot az a szebb...
(#) sikolymester válasza tursaba hozzászólására (») Máj 20, 2011 /
 
Sokan használnak C-t AVR-en. Aki kicsit komolyabb programot akar írni az ilyen-olyan módon biztos használ interruptot.

Viszont véleményem szerint mikroelektronika AVR compilert kevesen használnak. És mivel abban nem vagyok én sem jártas, így nem is nagyon néztem végig a kódodat.

Szerintem a legnépszerűbb fordító AVR-re az ingyenes avrgcc, így legnagyobb eséllyel erre kapsz segítséget.
(#) bladika válasza tursaba hozzászólására (») Máj 20, 2011 /
 
Szia!

Én is javasolnám neked az avr-gcc-t. Nem ismerem a fordítót amit használsz, de biztos vagy benne, hogy nem kell törölni az interrupt flag bitjét az ADC nek a interrupt handler végén?
(#) augre válasza trudnai hozzászólására (») Máj 21, 2011 1 /
 
Volt benne egy rövidzár azért melegedett annyira.

Azt kivettem, most a csatolt képen látható módon néz ki a kapcs és az a probléma, h. a tranzisztorok MINDIG nyitva vannak, ha bedugom a 12V tápot.
Tehát mindig világít minden led.
Pedig csak akkor kellene ha a avr lábán megjelenik a +5V.


Ha a programozó ról kapja a tápot az avr, akkor továbbra is rendesen működik.

Köszönöm a válaszokat.
(#) augre hozzászólása Máj 21, 2011 1 /
 
Most vettem észre, h. ebben az állapotban is kinyit az összes tranzisztor, valaki meg tudná mondani miért?

köszönöm
(#) Ricsi89 válasza augre hozzászólására (») Máj 21, 2011 /
 
Miért van a két test között a 400 Ohm-os ellenállás? Azt kösd csak át simán. A tranzisztorokra meg nem árt egy bázisellenállást rakni. Vagy esetleg még lehet, hogy lehúzó ellenállást is kívánna.
(#) augre válasza augre hozzászólására (») Máj 21, 2011 1 /
 
Akkor nyílnak ki a tranzisztorok, ha a 7805 input lábán rajta van a +12V és a GND lába pedig rajta van az avr GND-jén.
A 7805 +5V lába pedig csak lóg a levegőben

Miért nyitnak a tranzisztorok a kollektor emitter között?

köszönöm
(#) augre válasza Ricsi89 hozzászólására (») Máj 21, 2011 /
 
Ha az az ellenállás nincsen benne akkor mikor a programozóról meg melegszik az avr, az ott ilyen felhúzó ellenállás szerű, eleinte úgy volt, h. minden ellenálás bázisán volt egy ellenállás aztán így az 14 ellenállást lecseréltem egy 3 wattosra.
(#) augre válasza augre hozzászólására (») Máj 21, 2011 /
 
tehát minden tranzisztor bázisán volt egy ellenállás
(#) Ricsi89 válasza augre hozzászólására (») Máj 21, 2011 /
 
Persze hogy melegszik, ha nincs bázisellenállás. Így most nálad alapból a 400 Ohm-os ellenálláson kialakul a tranzisztorok nyitófeszültsége és bármit csinálsz soha nem fog lezárni a tranzisztor. A 400 Ohm-on ha már 0,6V esik, akkor már nem fog lezárni a tranzisztor, bármit csinálsz. Azt szedd ki onnan és rakjál minden tranzisztor bázisával sorba kb 1K-s bázisellenállást. Kicsit utána kellene olvasni az alapoknak is, mert azok nélkül, hiába vagy profi programozó bele fogsz ilyen piti hibákba esni minden egyes dolognál.
(#) augre hozzászólása Máj 21, 2011 /
 
értelek, köszönöm a választ.
(#) SKY hozzászólása Máj 21, 2011 /
 
Sziasztok!
Ezt szeretném beprogramozni, de található itt néhány fájl, köztük a .hex is, ez az egy fájl elég a programozáshoz?
Avrstudio 4.18 és avr-isp programozóm van. Hogyan kell összekötni az avr-t a programozóval? MOSI, MISO, RESET, és a tápok megvannak, az SCK-t melyik lábra kell kötni, továbbá az RXD és TXD-t nem kell rákötni? Az attiny2313 adatlapján XCK van írva (6-os láb) arra megy a programozó SCK-ja? Programozásnál is rá kell kötni a kvarcot?
A programban mit kell csinálni?
(#) tursaba válasza bladika hozzászólására (») Máj 21, 2011 /
 
Szia !
Vásárolt, Mikroelektronika C fordítót használok (jogtiszta). Adtak hozzá mintaprogikat is. Sajnos az IT kezelésekhez nem teljes. Így kerültem kérdésemmel a listára.
Tudomásom szerint az IT handler visszatörli a flaget.
Az MC fórumra rápróbálok, hátha belefutott már valaki ebbe a témába. Köszönöm.
(#) tursaba válasza trudnai hozzászólására (») Máj 21, 2011 /
 
Szia !

A vásárolt Mikroelektronika C fordítót használom.
Ezek szerint az elterjedt (GCC, stb) C-től van amiben eltér.
Jó az IT kezelés. A fordított állományban az IT vektor táblában a helyére (jó címre)fordította be.
Köszönöm.
Következő: »»   325 / 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