... und in DIL wäre da der M1284 im 40-Pin Gehäuse. Evtl. gibt es auch noch andere.
Du kannst aber auch den Timer umkonfigurieren, wenn du das Programm wechselst.
... und in DIL wäre da der M1284 im 40-Pin Gehäuse. Evtl. gibt es auch noch andere.
Du kannst aber auch den Timer umkonfigurieren, wenn du das Programm wechselst.
Hallo Zusammen,
erstmal danke für die Antworten
Werde mir mal den Atmega 1284 besorgen , den kann ich schon auf´s Steckbrett stecken !!
Anbei mal die zwei Programme die ich als eine eine Programm brauche.
["CODE"]$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Config Portb = Output
Led1 Alias Portb.1
Led2 Alias Portb.2
Led3 Alias Portb.3
Config Portd.2 = Input
Portd.2 = 1
Eingang Alias Pind.2
Config Int0 = Change
On Int0 Signalmessung
Enable Interrupts
Enable Int0
' Bei Timer1 (65536) mit 1 MHz und Prescaler=1
' 1 Tick: 1/1000000 *1 = 1 us
Config Timer1 = Timer , Prescale = 1
Timer1 = 0
On Timer1 Timer1_isr
Enable Timer1
Enable Interrupts
Dim Servowert As Word 'Wert in us. Normal: ca. 1000..2000
Do
Select Case Servowert
Case 0 To 1333 :
Led1 = 1 : Led2 = 0 : Led3 = 0
Case 1334 To 1666 :
Led1 = 0 : Led2 = 1 : Led3 = 0
Case 1667 To 2500 :
Led1 = 0 : Led2 = 0 : Led3 = 1
End Select
Waitms 100
Loop
End
Signalmessung:
If Eingang = 1 Then 'Wenn Signal=1 dann
Timer1 = 0 ' bei Null im us Takt
Start Timer1 ' anfangen zu zaehlen '
Else 'sonst
Stop Timer1 ' Timer stoppen und
Servowert = Timer1 ' Wert uebergeben
End If
Return
Timer1_isr: 'Fehleranzeige..
Led1 = 1 ' ..sollte nicht eintreten
Led2 = 1
Led3 = 1
Wait 5
Return["/CODE"]
Anbei der zweite code
["CODE"]$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Config Portb = Output
'Const Linkeranschlag = 35 'oder z.B. 40 ganz rechts - je nach Servo
'Const Rechteranschlag = 10 'oder z.B. 110 ganz links- je nach Servo
' Bei Timer1 (65536) mit 1 MHz und Prescaler=8
' 1 Tick: 1/1000000 *8 =8us
' 65536 - 63036 = 2500 * 8us = 20ms
' 65536 - 65411 = 125 * 8us = 1ms
' 65536 - 65286 = 250 * 8us = 2ms
Const 20ms = 63036
Const Rechteranschlag = 65411 '1ms
Const Linkeranschlag = 65286 '2ms Differenz=125
Config Timer1 = Timer , Prescale = 8
Timer1 = 20ms
On Timer1 Timer1_isr
Enable Timer1
Enable Interrupts
Dim Servo As Word '0..125
Dim Wiederholung As Byte
Dim I As Byte
Dim Analogwandler As Integer 'Variable zur Aufnahme des Wertes vom Analogwandler
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Analogwandler definieren
'Start Adc 'AD-Wandler starten (nach Config automatisch)
'Schnelles Hin- und Herschalten zwischen links und rechts:
For Wiederholung = 1 To 3 '3 mal
Servo = 0 'ganz links
Wait 1
Servo = 125 'ganz rechts
Wait 1
Next Wiederholung
'Langsames Hin- und Herschalten zwischen links und rechts:
For Wiederholung = 1 To 3 '3 mal
For I = 0 To 125 'langsam in eine Richtung
Servo = I
Waitms 20
Next
For I = 125 To 0 Step -1 'langsam in andere Richtung
Servo = I
Waitms 20
Next
Next Wiederholung
'Servostellung je nach Poti-Stellung:
Do
Analogwandler = Getadc(0) '0..1023
Servo = Analogwandler / 8 ' 0..127
Loop
End
Timer1_isr:
If Pinb.1 = 1 Then 'wenn 1 war
Portb.1 = 0 'dann aus und
Timer1 = 20ms ' Pause ca. 20 ms
Else 'sonst
Portb.1 = 1 'Impuls
Timer1 = Linkeranschlag + Servo ' für 1ms bis 2ms
End If
Return["/CODE"]
Habe beim ersten code schon mal probiert die werte * 8 zu erhöhen jedoch funktioniert leider nicht es geht nur eine LED auf dauer 1
Muß aber noch sagen das ich absoluter neuling GREENHORN bin .
Ich brauche doch die zwei 16 BIT Timer ???
Möchte ja mit meinem Fernsteuer Signal auch meine Servos steuern ( Sequenz), der ADC Poti Eingang im 2 Code fliegt raus.
Zur not kann ich auch zwei Controller nehmen und die Kommunikation über I/O ( Relais paralell zur LED ) nicht gerade Professionell aber funktioniert .
Wer eine gute Idee hat kann sich ja mal melden.
Bis dahin und nochmal Danke.
Gruß Thomas
P.S warum kann ich meinen Code nicht im Scroll-Fenster darstellen ??
["CODE"]
Ist doch richtig so ??
["/CODE"]
Geändert von Smith-mini-plane (17.12.2013 um 21:33 Uhr)
Weil das so nur FAST richtig ist - Anführungsstriche weg - und schon funzt´s.
Siehe (aus "Anbei der zweite code") :
Allerdings sind durch das Kopieren evtl. vorhandene Einrückungen verloren gegangen.Code:$regfile = "m8def.dat" $crystal = 1000000$hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space Config Portb = Output 'Const Linkeranschlag = 35 'oder z.B. 40 ganz rechts - je nach Servo 'Const Rechteranschlag = 10 'oder z.B. 110 ganz links- je nach Servo ' Bei Timer1 (65536) mit 1 MHz und Prescaler=8 ' 1 Tick: 1/1000000 *8 =8us ' 65536 - 63036 = 2500 * 8us = 20ms ' 65536 - 65411 = 125 * 8us = 1ms ' 65536 - 65286 = 250 * 8us = 2ms Const 20ms = 63036 Const Rechteranschlag = 65411 '1ms Const Linkeranschlag = 65286 '2ms Differenz=125 Config Timer1 = Timer , Prescale = 8 Timer1 = 20ms On Timer1 Timer1_isr Enable Timer1 Enable Interrupts Dim Servo As Word '0..125 Dim Wiederholung As Byte Dim I As Byte Dim Analogwandler As Integer 'Variable zur Aufnahme des Wertes vom Analogwandler Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Analogwandler definieren 'Start Adc 'AD-Wandler starten (nach Config automatisch) 'Schnelles Hin- und Herschalten zwischen links und rechts: For Wiederholung = 1 To 3 '3 mal Servo = 0 'ganz links Wait 1 Servo = 125 'ganz rechts Wait 1 Next Wiederholung 'Langsames Hin- und Herschalten zwischen links und rechts: For Wiederholung = 1 To 3 '3 mal For I = 0 To 125 'langsam in eine Richtung Servo = I Waitms 20 Next For I = 125 To 0 Step -1 'langsam in andere Richtung Servo = I Waitms 20 Next Next Wiederholung 'Servostellung je nach Poti-Stellung: Do Analogwandler = Getadc(0) '0..1023 Servo = Analogwandler / 8 ' 0..127 Loop End Timer1_isr: If Pinb.1 = 1 Then 'wenn 1 war Portb.1 = 0 'dann aus und Timer1 = 20ms ' Pause ca. 20 ms Else 'sonst Portb.1 = 1 'Impuls Timer1 = Linkeranschlag + Servo ' für 1ms bis 2ms End If Return
Ciao sagt der JoeamBerg
Lesezeichen