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"]
Lesezeichen