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 / 797
(#) panther76 válasza vargham hozzászólására (») Szo, 20:43 /
 
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 (») Hé, 6:26 /
 
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 (») Hé, 7:37 /
 
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 (») Hé, 7:40 /
 
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 (») Hé, 19:03 /
 
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.)
Következő: »»   797 / 797
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu