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   797 / 837
(#) panther76 válasza vargham hozzászólására (») Aug 11, 2018 /
 
Nem ragaszkodom a Flowcode-hoz, csak mint említettem a C nekem kissé kínai, ezért gondoltam egy folyamatábrát viszonylag könnyen össze tudok állítani és ezzel a feladat meg is van oldva, de tévedtem.
(#) vargham válasza panther76 hozzászólására (») Aug 13, 2018 /
 
A nyelv és a környezet majdnem mindegy. Elő kell venned az eszköz adatlapját, és meg kell nézned, hogy miként tud PWM-et generálni, majd be kell állítanod a megfelelő regisztereket. Lásd adatlap 11. fejezet, 8-bit Timer/Counter0 with PWM.
Az Arduino például elrejtni ugyan előled a részleteket, cserében egy olyan kész megoldást kapsz, ami feleslegesen nagy kódméretű, nem hatékony, és egyáltalán nem biztos, hogy neked a legjobb. Nem tudod állítani a PWM módot, frekvenciát, stb. Ráadásul gyárilag az ATTiny13 nincs is benne.
Kiegészítés: Ha nagyon gyorsan, kevés programozó tudással akarod csinálni, akkor szerencséd van, mert már létezik kiegészítő Arduinohoz ATTiny13-hoz: MicroCore. Itt annyi lesz a feladatod, hogy analogWrite(kimenet, kitöltési tényező), és már kész is.
(#) vargham válasza panther76 hozzászólására (») Aug 13, 2018 /
 
Idézet:
„nem sikerült a PWM létrehozása”

Kérdés maradt még, hogy milyen PWM-t szeretnél:
-Frekvencia
-Fast / phase correct
-Kitöltési tényező
stb
(#) vargham válasza vargham hozzászólására (») Aug 13, 2018 /
 
Ez a szimulátor szerint már csinál valamit. Ebből és az adatlapból már el tudsz indulni. PWM mód még nincs beállítva, csak a timer és az output.
  1. /*
  2.  * ATtiny13_PWM.cpp
  3.  *
  4.  * Created: 2018. 08. 12.
  5.  * Author : Mark Peter Vargha
  6.  */
  7.  
  8. #include <avr/io.h>
  9. #include <avr/interrupt.h>
  10.  
  11. int main(void) {
  12.    
  13.         cli();
  14.        
  15.         DDRB |= (1 << PB1); //OC0B output is on Port B, pin 1 (PIN6)
  16.         DDRB |= (1 << PB0); //OC0A output is on Port B, pin 0 (PIN5)
  17.         TIMSK0 &= ~(1 << OCIE0A); //Disable Timer0 compare A interrupt
  18.         TIMSK0 &= ~(1 << OCIE0B); //Disable Timer0 compare B interrupt
  19.         TIMSK0 &= ~(1 << TOIE0); //Disable Timer0 overflow interrupt
  20.        
  21.         TCCR0A &= ~(1 << COM0A1); //Toggle OC0A (PB0)
  22.         TCCR0A |= (1 << COM0A0); //Toggle OC0A (PB0)
  23.         TCCR0A &= ~(1 << COM0B1); //Toggle OC0B (PB1)
  24.         TCCR0A |= (1 << COM0B0); //Toggle OC0B (PB1)
  25.        
  26.         TCCR0B |= (1 << CS00); //Timer runs from IO clock without prescaler
  27.         OCR0A = 128;
  28.         OCR0B = 128;
  29.        
  30.         sei();
  31.        
  32.     while (1) {
  33.     }
  34. }
(#) panther76 válasza vargham hozzászólására (») Aug 13, 2018 /
 
Köszi, hogy érdemben foglalkoztál a problémámmal.
Kitöltési tényezős PWM-re van szükségem, a frekvencia PWM-et az emlékeim szerint FM (frekvencia moduláció)-nek hívják, mert ott a periódus idő is változik. (Természetesen nem kötekedni akarok, csak eltartott egy ideig, mire rájöttem ).
Mint írtam az AVR assembly-vel, még csak most ismerkedem( eddig csak a MOS 6510 és az intel 8048, 8051 és ezek származékait programoztam assembly-ben). Még sok minden nem világos számomra, pl. mi célt szolgálnak a fuse bitek, valamint melyik regisztereket kell feltétlenül beállítani a program elején. Valamint eléggé zavarba ejt az előzőekhez képest az AVR-ek sokféle címzési módja.
Ezért szerettem volna egy egyszerűbb programozási módszert (nyelvet?) használni, de ez a folyamatábrás lehetőség kibabrált velem.
Az általad írt kódrészlet számomra némi magyarázatra szorul, mert nem ismerem a C nyelvet.
Milyen szimulátort használtál?
Ha jól értem ez a főprogram, ami egy végtelen ciklusban van és le vannak tiltva a megszakítások.
A 20-as sortól nem értem a többit .
Megkérhetlek rá, hogy megírd C-ben a teljes programot? (Félreértés ne essék, nem lustaságból nem foglalkozom a C-vel, természetesen szeretném megtanulni a használatát, de nem túl sok szabadidővel rendelkezem és szorít a határidő, ezért is volt nagy pofára esés a Flowcode.)
(#) panther76 válasza vargham hozzászólására (») Aug 18, 2018 /
 
Szia!
Köszönöm a segítségedet!
Megoldódott a problémám, igaz nem C-ben, de sikerült összeállítani a programot.
További szép napot kívánok!
(#) vargham válasza panther76 hozzászólására (») Aug 18, 2018 /
 
Idézet:
„Megoldódott a problémám”

Érdekel, hogy miként. Hátha más is tanul belőle.
(#) panther76 válasza vargham hozzászólására (») Aug 18, 2018 /
 
Jogos a kérdés!
A feladatot Bascom-AVR-ben sikerült megoldani, bár nem minden része lett profi módon megoldva, de működik. A bekapcsolás utáni időzítést csak FOR-NEXT ciklussal tudtam megvalósítani, ezért az időzítést egy kicsit nehéz beállítani. Lehet, hogy van ennél elegánsabb módszer is, de ehhez nincs elég ismeretem sem AVR-ben, sem Bascom-os programozásban.
  1. $regfile = "attiny13a.dat"
  2.  $crystal = 9600000
  3.  $hwstack = 16
  4.  $swstack = 16
  5.  $framesize = 16
  6.  
  7. Config Portb = Output
  8.  
  9. Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
  10. Start Timer0
  11.  
  12. Config Adc = Single , Prescaler = Auto
  13. Start Adc
  14.  
  15. Dim W As Word , C As Integer
  16.  
  17. For C = -32768 To 30000        ' Start delay of HIGH Power Light   '
  18. W = Getadc(2)
  19. Pwm0a = W        ' FET On '
  20. Next C
  21.  
  22. Do
  23. Pwm0a = 0         ' FET Off '
  24. Pwm0b = 5         ' Start LOW Power Light (A7135 Led Driver On) '
  25. Loop
  26. End
(#) wbt válasza panther76 hozzászólására (») Aug 20, 2018 /
 
Wait, Waitms, Waitus utasítások vannak. A Timer0 8 bites, az ADC meg 10 (W: word), csak nehogy megtréfáljon, hogy négyszer kapsz 0-255 PWM-et az ADC értékétől függően.
(#) tibor.tibi41 hozzászólása Aug 22, 2018 /
 
Sziasztok!
Segítségeteket kérem. Egy gyári készülékben az Atmega16 egyik kimenete tönkrement.A flash-ből és az eepromból kitudom olvasni az adatokat de egy új Atmega16-ba visszatöltve nem müködik a készülék.Mit lehet a baj? Sajnos a gyártó már nem létezik a készülékre viszont szükségünk lenne.
(#) Kovidivi válasza tibor.tibi41 hozzászólására (») Aug 22, 2018 / 1
 
A flash-ből nem a programot kapod vissza, hanem csak zagyvaságot. Le van védve az AVR. Vagy megírod a programot magad, vagy más, vagy felkeresed a gyártót, hogy küldjenek másik AVR-t. A programot szinte biztosan nem kapod meg.
(#) pajesz66 hozzászólása Aug 28, 2018 /
 
Sziasztok!

Kezdő arduinosként kérdezném, hogy mi az a minimum áramkör, amit meg kell építenem, ha csak egy Atmega IC-m van? Lehet én vagyok a béna, de nem találtam meg ezt egyértelműen.
Nem drága a fejlesztő board, de esetenként kultúráltabban nézne ki csak egy ic....

A másik kérdésem: Ha van egy programom, hogyan tudom kiolvasás ellen védeni? Lehetséges ez valahogy?
(#) vargham válasza pajesz66 hozzászólására (») Aug 28, 2018 /
 
ATMega IC + 10 kOhm felhúzó a resetre + 100 nF kondenzátor a tápra.
(#) Kovidivi válasza vargham hozzászólására (») Aug 28, 2018 /
 
Ha belső oszcillátoros, akkor ennyi. Ha nem, akkor kvarc és 2db kondi kell a kvarc lábai és a GND közé pluszban.
(#) pajesz66 válasza Kovidivi hozzászólására (») Aug 28, 2018 /
 
Tehát akkor ez elég:
(#) csatti2 válasza pajesz66 hozzászólására (») Aug 28, 2018 /
 
Igen, bár az AREF-et nem kötném össze a VCC-vel. Mindössze tennék egy 1nF/10nF-os kondit a GND és az AREF közé, az IC a programtól függően összeköti majd az AREF-et az AVCC-vel vagy a belső referenciafesszel. Ja igen, javasolt minden VCC-nek külön adni 100nF-os kondit.
A hozzászólás módosítva: Aug 28, 2018
(#) pajesz66 válasza csatti2 hozzászólására (») Aug 28, 2018 /
 
Ok. Köszi!
A kérdés második részével mi a helyzet? Létezik bármilyen védelem?
(#) csatti2 válasza pajesz66 hozzászólására (») Aug 28, 2018 /
 
Igen létezik. A fuse bitekkel tudod beállítani (lock bits).
(#) pajesz66 válasza csatti2 hozzászólására (») Aug 28, 2018 /
 
Na ez viszont jó hír! A linkelt szimulátor felületét elnézve ez IDE alól nem megy, hanem valamilyen külső szoftware/programozó kell hozzá jól gondolom? Van erről bővebb infó valahol? (ha lehet magyarul...)
Bocs a sok kérdésért, de most vágtam bele komolyabban a dologba, a programozgatás áramkörépítésben már nem mai darab vagyok, de még soha nem kellett a megírt szoft. védelmével foglalkoznom...
(#) csatti2 válasza pajesz66 hozzászólására (») Aug 28, 2018 /
 
Ez az ablak az IDE egyik dialógusa, nem külső program.
(#) pajesz66 válasza csatti2 hozzászólására (») Aug 28, 2018 /
 
Hol van ez? Én nem találom....
(#) vargham válasza pajesz66 hozzászólására (») Aug 29, 2018 /
 
Atmel Studio 7
Tools / Device Programming
A hozzászólás módosítva: Aug 29, 2018
(#) szucsip hozzászólása Szept 4, 2018 /
 
Sziasztok! Egy olyan kérdésem lenne, hogy valakinek van-e tapasztalata első kézből a régi, és az Új (mondjuk Atmega128A ) gyártástechnológiával készült chip-ek különbségéről. Ami konkrétan érdekelne: ADC pontosság változott-e, zajérzékenység..? Megéri a régit venni (500Ft-tal drágábban) mondjuk a HESTORE-ból (feltéve, hgoy tényleg a régi szériát árulják)?
A hozzászólás módosítva: Szept 4, 2018
(#) TavIR-AVR válasza szucsip hozzászólására (») Szept 7, 2018 / 2
 
Nem, nem éri meg.
A váltás (sima helyett A):
- a belső felhúzók értéke 10..20k helyett 80...120k lett
- a reset felhúzója szintén
- kisebb csíkszélesség a lapkán
- kisebb áramfelvétel

Bővebben: A vagy nem A? (TavIR)
(#) szucsip válasza TavIR-AVR hozzászólására (») Szept 12, 2018 /
 
Köszi szépen. Zajérzékenységről tudni lehet valamit? Esetleg IO portok robosztussága, vagy egy kis overclocking 1-2 MHz-vel?
(#) TavIR-AVR válasza szucsip hozzászólására (») Szept 13, 2018 /
 
Zajérzékenység? Tapasztalat: nem lett nagyobb (kivéve ha csak a belső felhúzót használod. Ott minden vacakot össze képes szedni (gyege felhúzóellenállás lett: 10k helyett 100k-val számolhastz/modellzhetsz))
Overclock: nem javasolt. Nálam 20 MHz-val simán mennek (adatlapi határ ). Eddig 32 MHz-ig húztam kívncsiságból egy Mega16PA-t. Csak próba volt.
DE vannak kísérletező kedvűek: Bővebben: Link
(#) TavIR-AVR válasza pajesz66 hozzászólására (») Szept 13, 2018 /
 
Az Arduino bootloadere a kiolvasást is támogatja!
Azaz a fusebitekkel hiába véded!

Megoldás:
1, fusebitekkel védeni _és_ külső programozóval égetni a chipet - bootloader nélkül.
2, fusebitekkel védeni, és a bootloadert olyanra kicserélni, ami _nem_ támogatja a visszaolvasását.
(#) fifadani hozzászólása Szept 13, 2018 /
 
Sziasztok!
Nem olyan régen írtam AVR uC-s RS485 busz rendszerrel kapcsolatban.
A kommunikáció már egész jól megy. Viszont van egy olyan gondom, hogy; be/ki-kapcsolási tranziens.
Ha egy node-ot, lekapcsolok a buszról, resetelnem kell a mestert, hogy helyre álljon a kommunikáció.
Max485 ict használok jelenleg. 120 Ohm lezárás. Gnd közös. Gondolkodom az adm2483 leválasztott busz meghajtón.
Érdemes megvenni az adm-et vagy van tanácsotok számomra?

Köszi,
Dani.
(#) TavIR-AVR válasza fifadani hozzászólására (») Szept 14, 2018 /
 
A két szétfeszítő 680 ohm ellenállás hiányzik!
Ha mindenki vételen van, e nélkül nincs a busznak fix potenciálja!
(#) fifadani hozzászólása Szept 16, 2018 /
 
Szia!
Max485-ös modulokat használok. Tudomásom szerint ezeken van 2db 20k-s szétfeszítő.
20k?!

Dani
Következő: »»   797 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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