PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rp6 mit bascom (kleiner anfang)



roboterheld
23.09.2007, 12:06
mal ein motortest gemacht mit bascom und rp6.
auch die print-daten werden im terminal vom rp6loader empfangen.
habe in der m32def.dat die neuen namen beigefügt ("neu") wie sie auch in winavr-c sind bzw bei atmel neu sind :



;TCCR1A
COM1A1 =7
COM1A0 =6
COM1B1 =5
COM1B0 =4
FOC1A =3
FOC1B =2
PWM11 =1
WGM11 =1 ; neu
PWM10 =0
WGM10 =0 ; neu

;TCCR1B
ICNC1 =7
ICES1 =6
CTC11 =4
WGM13 =4 ; neu
CTC10 =3
WGM12 =3 ; neu
CS12 =2
CS11 =1
CS10 =0


so sehen die pwm-werte in winavr-c aus :



// Initialize Timer1 - PWM:
// PWM, phase correct with ICR1 as top value.
TCCR1A = (0 << WGM10) | (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
TCCR1B = (1 << WGM13) | (0 << WGM12) | (1 << CS10);
ICR1 = 210; // Phase corret PWM top value - 210 results in
// about 19 kHz PWM.
// ICR1 is the maximum (=100% duty cycle) PWM value!
// This means that the PWM resolution is a bit lower, but
// if the frequency is lower than 19 kHz you may hear very
// annoying high pitch noises from the motors!
// 19 kHz is a bit over the maximum frequency most people can
// hear!



hier das kleine bascomprogramm mit encoder rechts und links :



$regfile = "M32def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 64
$baud = 38400

Dim Tccr1a_set As Byte
Dim Tccr1b_set As Byte
Dim Wert As Byte
Dim Zaehler As Word
Dim Zaehler1 As Word

Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinb.4 = Output

On Int0 Int0_int
On Int1 Int1_int

Enable Interrupts

Config Int0 = Falling
Config Int1 = Falling

Enable Int0
Enable Int1

Tccr1a_set = 0
Tccr1b_set = 0

Reset Tccr1a_set .wgm10
Set Tccr1a_set .wgm11
Set Tccr1a_set .com1a1
Set Tccr1a_set .com1b1
Tccr1a = Tccr1a Or Tccr1a_set

Reset Tccr1b_set .wgm12
Set Tccr1b_set .wgm13
Set Tccr1b_set .cs10
Tccr1b = Tccr1b Or Tccr1b_set

Icr1h = 0
Icr1l = 210

Set Portb.4

Reset Portc.2
Reset Portc.3

Wait 1

For Wert = 0 To 150
Waitms 50
Pwm1a = Wert - 3 ' für meinen geradeauslauf
Pwm1b = Wert
Next

Wait 4

Pwm1a = 0 ' wenn rückwärts gefahren werden soll, muss man langsam die pwm... auf "0" runterfahren und nicht sofort auf "0" und gleich rückwärts
Pwm1b = 0

Reset Portb.4

Print "links " + Str(zaehler) + Chr(13)
Print "rechts " + Str(zaehler1) + Chr(13)

End

Int0_int:
Disable Int0
Zaehler = Zaehler + 1
Enable Int0
Return

Int1_int:
Disable Int1
Zaehler1 = Zaehler1 + 1
Enable Int1
Return