PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit 2313 und UP / Down Tastern



ThruMyEyez
09.02.2009, 20:02
Hallo,

Ich beschäftige mich noch nicht allzulange mit AVR´s und finds ganz interessant. Ich habe im net eine .doc Datei gefunden "AVR_HowTo.docx". Dort sind lektionen und bestimmte Dinge erklärt.

Habe nun Folgen Code aus dem Tutorial und wollte diesen an einen Tiny2313 anpassen.


$regfile = "8535def.dat"
$crystal = 4000000

config portb = input
portb.0 = 1 'Pullup
portb.1 = 1 'Pullup


config timer2 = PWM , PRESCALE = 1 , PWM = ON , COMPARE PWM = CLEAR UP
OCr2 = 100 'Anfangswert auf 100/256
enable timer2

do
debounce Pinb.0 , 0 , Increment , sub
debounce Pinb.1 , 0 , Decrement , sub
loop

sub increment
if ocr2 < 246 then
ocr2 = ocr2 + 10
end if
end sub

sub decrement
if ocr2 > 9 then
ocr2 = ocr2 - 10
end if
end sub


Hier der Klagliche versuch mit dem geänderten Code von mir.


$regfile = "2313def.dat"
$crystal = 8000000

config portb = input
portb.0 = 1 'Pullup
portb.1 = 1 'Pullup


Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up ,
Ocr1a = 100 'Anfangswert auf 100/256
Enable Timer1

do
debounce Pinb.0 , 0 , Increment , sub
debounce Pinb.1 , 0 , Decrement , sub
loop

sub increment
If Ocr1a < 246 Then
Ocr1a = Ocr1a + 10
end if
end sub

sub decrement
If Ocr1a > 9 Then
Ocr1a = Ocr1a - 10
end if
end sub


Das mit den Subroutinen ist mir noch ein bischen schleierhaft und was der Compiler mit "Declare Sub"? meint? Dazu wollte ich das Register von "OCR2" auf "OCR1A" ändern, denn nur diesen ausganz will ich per Verändern.

Vllt schaut sich jemand den Code an und kann mir vllt weiterhelfen?

ThomasW
10.02.2009, 21:25
Hallo ThruMyEyez

Ein Tip : Beispiele in Bascom ansehen

mach das mal ohne Sub, ganz einfach z.B

dim x as Byte
x = 100

do

if Pinb.0 = 0 then
if x > 0 then
dec x
Ocr1a = x
end if
end if

if Pinb.1 = 0 then
if x < 254 then
incr x
Ocr1a = x
end if
end if

wait 1

loop

Mfg

Edblum
11.02.2009, 08:24
Moin,

Dabei ist es auch wichtig die 'Sub's' zu deklarieren. Das war in beide Beispiele nicht der Fall. Weiter funktioniert Pwm1a=x auch statt Ocr1a=x. Ich bin nicht sicher, vielleicht ist es besser x zu incrementieren statt Ocr1a bzw Pwm1a.

Gruss,

Edblum

ThruMyEyez
12.02.2009, 10:34
Also ich hab mal folgendes gemacht und es funktioniert!


$regfile = "attiny2313.dat"
$crystal = 20000000



Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.0 = Input
Config Pinb.1 = Input

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

Pwm1a = 100
Pwm1b = 155

Start Timer1


Declare Sub Increment
Declare Sub Decrement

Do
Debounce Pinb.0 , 0 , Increment , Sub
Debounce Pinb.1 , 0 , Decrement , Sub
Loop

Sub Increment
If Pwm1a < 254 Then
Pwm1a = Pwm1a + 1
End If
End Sub

Sub Decrement
If Pwm1a > 1 Then
Pwm1a = Pwm1a - 1
End If
End Sub

Ich bekomme eine bei pwm1a eine schöne PWM mit 40%, allerdings funktionieren die taster nur auf dem Pollin board. Oô Sobald der Chip in die Schaltung kommt geht die PWM zwar aber die taster reagieren nicht, hab schon geguggt ob es da vllt nen kurzschluss gibt, was aber nicht der fall ist und fusebits sind CKSELL auf 1111 und SUT11.

Allerdings hat er auf dem Pollinboard einen 8Mhz quarz und in der Schaltung 20Mhz, vllt liegt es daran.. oder ich tappe im Dunkeln denn im Datenblatt steht eig. das es bis 20Mhz gehen sollte.

Vielen Dank für eure Antworten bis jetzt!

EDIT: Ich hab vergessen den internen PullUp zu aktivieren, das war der grund weswegen es nicht geklappt hat, nun sind die Tasterpins auf High und werden gegen Masse gezogen was wunderbar klappt.

Danke euch

Edblum
12.02.2009, 13:14
Moin,

Weiterhin muss mann noch aufpassen, das beim Inkrementieren der PWM nicht mehr als 255 wird, da es dann wieder bei NULL anfangt. Dass habe ich bei meine Triebwagen (mit RC-5) erfahren, die nach "abschalten" plötzlich über die Bahn rasste.

Also muss mann:



Sub Ab:
If Motor > 250 Then
Motor = 255
Goto Halt
Endif
Motor = Motor + 3
Halt:
If Ribit = 1 Then
Pwm1a = Motor 'umgekehrte Logik
Else
Pwm1b = Motor 'umgekehrte Logik
End If
End Sub


Ich benütze eine H-Brücke, deswegen 'Ribit' für Richtungsinformation

Viel Erfolg,

Edblum