www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ATtiny26 in PWM

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
xklemen
Član
Član



Pridružen-a: Ned 10 Jan 2010 10:55
Prispevkov: 35
Aktiv.: 0.19
Kraj: Novo mesto

PrispevekObjavljeno: Ned Jan 10, 2010 11:24 am    Naslov sporočila:  ATtiny26 in PWM Odgovori s citatom

Pozdravljeni!

Pred mescom dni sem se lotil osvetlitve domačega stopnišča z uporabo LED diod, uporabil sem Arduino ploščico z ATmega328 in sprogramiral v Bacumu.

Program:
Senzor na prvi stopnici zazna tvoj prihod, nažgle LED za 15s, in jih nato z PWM ugaša 7s.

Ena slikca kako izgleda Very Happy Stopnice še niso dokončan Wink

Po enem mesecu sem ugotovil, da je le škoda porabiti 32kb prostora, za nažiganje ledic, in hočem zamenjati ATmega328 za ATtiny26, ki ima tudi 2 PWM kanala.
Vendar ista koda javi napako pri prevajanju Sad
Error : 12 Line : 4 Unknown CONFIG parameter [PWM], in file :....

Bascom koda:
Koda:
 
$regfile = "attiny26.DAT"
$crystal = 1000000

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1
Enable Timer1

Dim W As Word
Config Debounce = 20

Config Portb.6 = Input
Config Portb.1 = Output
Config Portb.3 = Output
Reset Portb.6

Ocr1a = 255
Ocr1a = 255

Zacetek:
Goto Naziga
Do
    Debounce Pinb.6 , 1 , Naziga
Loop

Naziga:
W = 255
Do
   Ocr1a = W
   Ocr1a = W
   W = W - 5
   If W = 0 Then Goto Sveti
   Waitms 30
Loop

Sveti:
Do
    Ocr1a = 0
    Ocr1a = 0
    Waitms 15000
    Goto Ugasa
Loop

Ugasa:
W = 0
Do
   Ocr1a = W
   Ocr1a = W
   W = W + 1
   If W = 256 Then Goto Zacetek
   Waitms 30
Loop


Zahvaljujem se vam za pomoč!

_________________
Lp, Klemen
http://www.klemenbercko.net/
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1714
Aktiv.: 7.23
Kraj: Ig

PrispevekObjavljeno: Ned Jan 10, 2010 12:56 pm    Naslov sporočila:   Odgovori s citatom

Kolikor se jaz spomnim, ima Bascom en bug kar se tiče PWM in Tiny26. Rešitvi sta dve: Ročno nastavi registre za PWM (poglej datasheet) ali pa napravi SW PWM s pomočjo timerja. Nekoč, daleč nazaj sem tudi sam naredil nekaj podobnega. Sicer koda, ki je spodaj uporablja ADC, s katerim sem nastavljal število vrtljajev nekega motorja, ne spomnim se več, pol sem poskusil še z led...no vsekakor. Prednost SW PWM (sploh če Tinyja uporabljaš samo za led) je v tem, da lahko generiraš več kanalov. Sama teorija SW PWM je pa v tem. Vzameš timer, mu daš vrednost 100 (100%) in potem bereš vrednost in jo primerjaš s svojo nastavljeno. Dokler je vrednost timerja manjša od nastavljene je LED vklopljena, ko pa vrednost timerja preseže nastavljeno vrednost, jo izklopiš... 100 je fajn vrednst, ker lahko določaš PWM kar v %...

Še moja koda:

Koda:

'------------------------------------------------------------
'                 ATTINY26 PWM LED dimmer
'------------------------------------------------------------
'$sim
$regfile = "at26def.dat"
$crystal = 8000000
Config Timer0 = Timer , Prescale = 64
Config Adc = Single , Prescaler = Auto
Enable Interrupts
Enable Timer0
Start Timer0
Config Pinb.3 = Output
Dim W As Integer , X As Integer
On Timer0 Timer0isr
Zacetek:
Do
If W > Timer0 Then
   Portb.3 = 0
   Else
   Portb.3 = 1
End If
'If W = 0 Then
 '  Goto Konec
  ' End If
Loop


'Konec:

'Portb.3 = 1
'Goto Zacetek


Timer0isr:
Start Adc
X = Getadc(2)
W = X / 4
Stop Adc
Return


LP G

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 563
Aktiv.: 2.38
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jan 10, 2010 1:00 pm    Naslov sporočila:   Odgovori s citatom

Kot je povedal Gorazd, lahko ročno nastaviš registre.
En primer za to je:
Koda:
   1.
      ' Diese Anwendung steuert 2 LED am PB1 & PB3 am ATtiny26 heller und dunkler mit PWM
   2.
      '
   3.
      $regfile = "attiny26.dat" ' specify the used micro
   4.
      $crystal = 4000000
   5.
      Dim Pwmval As Byte ' Helligkeit dere LED
   6.
      Config Portb.1 = Output ' Augang OC1A (Timer/Counter1 PWM Output A,
   7.
      Config Portb.3 = Output ' OC1B (Timer/Counter1 PWM Output B
   8.
      Config Porta.0 = Input ' Schlater 1 Dunkler
   9.
      Config Porta.1 = Input ' Schlater 2 Heller
  10.
      Tccr1a = &B10100011 ' This sets the PWM1a and PWM1b to clear on match of Ocr1a and Ocr1b.
  11.
      Tccr1b = &B00000101
  12.
      'Tccr1b = &B00001001
  13.
      'This sets the TMR1 clock to be PCK/256, which at 8MHz = about 31KHz.
  14.
      'You'll want to set this to something you want, you can got all the way
  15.
      'to /16384 with &B00001111
  16.
      Ocr1c = 255
  17.
      'Regardless of what the data sheet says, if you don't set this register
  18.
      'to be 255, the PWM won't come on properly (which may be what is biting
  19.
      'you). This register sets the overall period of the PWM module, there
  20.
      'are bits turning a match on and off for this register, but no matter how
  21.
      'you set them, they turn it on (bug in the chip.)
  22.
       
  23.
      Porta.0 = 1 : Porta.1 = 1
  24.
      Pwmval = 254 ' Helligkeit auf 1 setzen
  25.
      Ocr1a = Pwmval '' set the PWM duty cycle 128 for 50%
  26.
      Ocr1b = Pwmval '' set the PWM duty cycle 255 for 100%
  27.
      Do
  28.
      If Pina.0 = 0 Then ' Schalter Dunkler
  29.
      If Pwmval < 255 Then Incr Pwmval
  30.
      Waitms 5
  31.
      Ocr1a = Pwmval
  32.
      Ocr1b = Pwmval
  33.
      End If
  34.
      If Pina.1 = 0 Then ' Schalter Heller
  35.
      If Pwmval > 1 Then Decr Pwmval
  36.
      Waitms 5
  37.
      Ocr1a = Pwmval
  38.
      Ocr1b = Pwmval
  39.
      End If
  40.
      Loop


Vlado
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xklemen
Član
Član



Pridružen-a: Ned 10 Jan 2010 10:55
Prispevkov: 35
Aktiv.: 0.19
Kraj: Novo mesto

PrispevekObjavljeno: Ned Jan 10, 2010 2:14 pm    Naslov sporočila:   Odgovori s citatom

Zahvaljujem se vama za hiter odgovor, čeprav je nedelja Applause Very Happy

RGorazd je napisal/a:

Koda:

'------------------------------------------------------------
'                 ATTINY26 PWM LED dimmer
'------------------------------------------------------------
'$sim
$regfile = "at26def.dat"
$crystal = 8000000
Config Timer0 = Timer , Prescale = 64
Config Adc = Single , Prescaler = Auto
Enable Interrupts
Enable Timer0
Start Timer0
Config Pinb.3 = Output
Dim W As Integer , X As Integer
On Timer0 Timer0isr
Zacetek:
Do
If W > Timer0 Then
   Portb.3 = 0
   Else
   Portb.3 = 1
End If
'If W = 0 Then
 '  Goto Konec
  ' End If
Loop


'Konec:

'Portb.3 = 1
'Goto Zacetek


Timer0isr:
Start Adc
X = Getadc(2)
W = X / 4
Stop Adc
Return


LP G


Vaša koda deluje, vendar nemorem ledice ugasniti do konca, še vedno sveti na recimo 30% in žmiga (se opazi), ali je rešitev za to?

Pri kodi od vas Vlado pa napiše napako in sicer:
Koda:

Error: 242 Line: 12 Source variable does not match the target variable [TCCR1A = &AMP;B10100011]
Error: 242 Line: 13 Source variable does not match the target variable [TCCR1B = &AMP;B00000101]


V bascumu sem bol začetnik, tako da.. Brick wall

_________________
Lp, Klemen
http://www.klemenbercko.net/
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 563
Aktiv.: 2.38
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jan 10, 2010 3:04 pm    Naslov sporočila:   Odgovori s citatom

Problem je v tem da Bascom pozna Timer1 kot 16 bitni, ATtiny26 ima dva 8 bitna Timer-ja.
V kodi ki sem jo poslal odstrani "AMP;" v vrsticah kjer prijavi napako in poskusi
znova.



Citiram:
Tccr1a = &amp;B10100011


Tccr1a=&B10100011

Vlado
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xklemen
Član
Član



Pridružen-a: Ned 10 Jan 2010 10:55
Prispevkov: 35
Aktiv.: 0.19
Kraj: Novo mesto

PrispevekObjavljeno: Ned Jan 10, 2010 5:23 pm    Naslov sporočila:   Odgovori s citatom

Sedaj pa prevede, vendar ko določam "Ocr1a = x" in spreminjam x ledica le skos sveti Sad Sad

Koda:

$regfile = "attiny26.dat"
$crystal = 4000000

Dim X As Byte

Config Portb.1 = Output
Config Portb.3 = Output

Tccr1a = &B10100011
Tccr1b = &B10100011

Do
For X = 0 To 255 Step 5
   Ocr1a = X
   Ocr1b = X
   Waitms 30
Next X

For X = 255 To 0 Step 1
   Ocr1a = X
   Ocr1b = X
   Waitms 30
Next X

Loop

_________________
Lp, Klemen
http://www.klemenbercko.net/
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
xklemen
Član
Član



Pridružen-a: Ned 10 Jan 2010 10:55
Prispevkov: 35
Aktiv.: 0.19
Kraj: Novo mesto

PrispevekObjavljeno: Tor Jan 12, 2010 7:57 pm    Naslov sporočila:   Odgovori s citatom

Očitno nebom dobil odgovora na moj problem Sad Rolling Eyes
_________________
Lp, Klemen
http://www.klemenbercko.net/
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 563
Aktiv.: 2.38
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jan 12, 2010 9:45 pm    Naslov sporočila:   Odgovori s citatom

Klemen,
nimam ATT26 da bi preizkusil.
Še enkrat poglej primer ki sem ga poslal in najprej preizkusi njega brez popravkov, potem pa predeluj program naprej.



Koda:
Tccr1a = &B10100011
Tccr1b = &B10100011

To ne bo dobro, vzemi datashet in poglej ali je to pravilno.

Vlado
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group