PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo-Befehl stört 1wire Kommunikation



spelli2001
06.05.2012, 17:47
Hallo,

der Servo-Befehl stört anscheinend die 1wire-Kommunikation in meinem Programm. Den Timer1 verwende ich für PWM eines L293D:


Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8


Ich verwende einen Atmega8.

Mit dem Timern tue ich mich schwer... was wäre der weitere Ansatz um ein Servo ohne Servo-Befehl zu nutzen?

Danke.

BlaueLed
07.05.2012, 13:37
Hi,

schau Dir den Befehl Pulseout an. Den benutze ich um ein einfaches servo anzusteuern. Nach dem Befehl die Pause nicht vergessen.

Gruß BlaueLed

spelli2001
07.05.2012, 16:30
Hallo,

danke für den Tipp.

Pausen kann ich leider nicht gebrauchen... Wenn ich richtig verstanden habe, dass du mit Pause wait meinst.

Ich habe woanders gelesen, dass während des 1wire-Befehls der Timer0 gestoppt und dann wieder gestartet werden soll.

Allerdings passiert bei mir folgendes bei stop und start timer0:

1wire läuft problemlos, allerdings ist dann nichtsmehr mit servo(1)... Da passiert dann gar nichts mehr...

BlaueLed
08.05.2012, 11:17
Hi,

also ich mache folgendes:

Ich verwende den Timer1 und konfiguriere den auf 20ms. Also alle 20ms ein Überlauf des Timers. In dessen ISR setze ich ein Flag ( z.B. 20ms_flag ). Dann in der Hauptschleife polle ich das Flag -> if 20ms_flag = 1 then pulseout ..... Danach setze ich das flag auf 0. Somit hast Du keine Wartezeit und alle 20ms wird das servo angesteuert.

Gruß BlaueLed

spelli2001
08.05.2012, 12:54
Danke für die ausführliche Erklärung! - Ich werde das heute Abed bzw. morgen testen!

spelli2001
17.06.2012, 17:36
Hallo, aus dem -morgen testen- sind 6 Wochen vergangen... Ich bin Vater geworden und da waren einige Dinge wichtiger... ;-)

Bei 4 MHz gibt pulsout alle 1us einen Wert aus.
Bei 7,3728 MHz wären das 1,843us...

möchte ich also meinen 7,4 Volt Servo "Jamara HVD10MG" auf eine 1ms (= 1000us) oder 2ms (= 2000us) ansteueren,

rechne ich für links, 1000us, -> 1000us / 1,843us = 542,6

rechne ich für rechts, 2000us -> 2000us / 1,843 us = 1085,2

mittig wäre dann 1500us / 1,843us = 813,9


Allerdings höre ich immer nur ein "pulsen"... am Servo passiert nichts.

Was mache ich falsch?

Anbei der grds. Syntax für das Pulseout und der gesamte Code.

Danke, Christoph




Dim 20ms_flag As Bit
Dim Servo As Word


Const Timer2vorgabe = 112

Config Portb.2 = Output

Config Timer2 = Timer , Prescale = 1024


On Timer2 Timer2_irq

Enable Interrupts
Enable Timer2

Servo = 814

Do

If 20ms_flag = 1 Then

Pulseout Portb , 2 , Servo
20ms_flag = 0

End If


Loop
End





Timer2_irq:

20ms_flag = 1

Timer2 = Timer2vorgabe


Return


Hier nochmal der vollständige Code:


'--------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'--------------------------------------------------------------------------

$regfile = "m8def.dat"
$crystal = 7372800 ' 7,3728 Mhz Quarzoszillator an PB6 / XTAL 1
$hwstack = 64
$swstack = 64
$framesize = 64

$baud = 9600


'--------------------------------------------------------------------------
' Definition von Ressourcen
'--------------------------------------------------------------------------

Pwr_all Alias Portc.4 'Abschaltung der Servos und LM2675 (5V für GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portc.1
Pwr_video Alias Portd.4
Pwr_atmega Alias Portd.3

Bit0 Alias Portc.2
Bit1 Alias Portd.5
Bit2 Alias Portb.5

Cam_gnd Alias Portd.6

Led_rot Alias Portc.5

Pan1 Alias Portb.0 ' für L293 D
Pan2 Alias Portd.7



'--------------------------------------------------------------------------
' Definition von Konstanten
'--------------------------------------------------------------------------

Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0 -> ADC auflösen

Const Timer2vorgabe = 112

Const S1_links = 100 'je nach Servo!
Const S1_rechts = 50 'je nach Servo!

'--------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'--------------------------------------------------------------------------

'---- Betriebsspannung messen ----
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5

'---- Commands ----
Dim Quittierung As String * 14
Dim Gpshoehe As String * 13


'---- Command empfangen xxx----

Dim Cmd As Byte



'Dim für GPS einlesen
Dim Gelesen As Byte 'eingelesenes Zeichen

Dim Teilstring(14) As String * 12
Dim Anzahl2 As Byte
Dim Gpsdaten As String * 98
Dim Header As String * 6
'Dim Stunde As Byte
Dim Tempstring As String * 2



'---- Temperaturmessung ----
Dim Temp(9) As Byte
Dim X As Byte
Dim Celsius As Integer
Dim T As Single
Dim Temperatur As String * 5


'--- Servo ---
Dim 20ms_flag As Bit
Dim Servo As Word


'---- PWM für A293D ----
Dim A As Byte

Dim Swert As Byte

'--------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'--------------------------------------------------------------------------

'---- CONFIG ----

' RS232 Hardware
Config Serialin = Buffered , Size = 1 ' konfig serial in
Open "COMB.7:9600,8,N,1" For Input As #1 'PB.7 = RxD SoftUART / GPS


' ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren

' Servo
'Config Servos = 1 , Servo1 = Portb.2 , Reload = 10

' Timer für PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8

' Timer für Servosteuerung
Config Timer2 = Timer , Prescale = 1024

' schaltbare Ausgänge
Config Pwr_all = Output ' GPS- und Video-Modul sowie 5 Volt Versorgung hierfür abschalten
Config Pwr_gps = Output
Config Pwr_video = Output
Config Pwr_atmega = Output

Config Bit0 = Output
Config Bit1 = Output
Config Bit2 = Output

Config Cam_gnd = Output

' Status-LED rot
Config Led_rot = Output

' L293D für Servo als Motor
Config Portb.1 = Output
Config Pan1 = Output 'LD293
Config Pan2 = Output

' Servo PIN
Config Portb.2 = Output

'1wire für Temp.-Messung
Config 1wire = Portc.0 ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert

'Interrupts
On Timer2 Timer2_irq

Enable Interrupts
Enable Timer1
Enable Timer2

' sonstige
Start Adc
Declare Sub Xbee ' Senderoutine, um $GROUND#... permanent zu senden

'--------------------------------------------------------------------------
' Init
'--------------------------------------------------------------------------

Pwr_atmega = 1 ' FET für Atmega auf ON

Pwr_all = 0 ' bei Systemstart Peripherie auf OFF
Pwr_video = 0
Pwr_gps = 0

Led_rot = 1 ' Led_rot OFF

Pan1 = 0 'L293D OFF
Pan2 = 0

Bit0 = 1
Bit1 = 1
Bit2 = 1

Cam_gnd = 1


Servo = 814

'Swert = 100
'Servo(1) = Swert 'Servo

'LED blinken lassen
Led_rot = 1
Waitms 100
Led_rot = 0
Waitms 100
Led_rot = 1
Waitms 100
Led_rot = 0
Led_rot = 1
Waitms 100
Led_rot = 0
Waitms 100
Led_rot = 1
Waitms 100
Led_rot = 0


'nach einer Sek. Pwr_all ON
Wait 1
Pwr_all = 1

'nach einer weiteren Sek. Pwr_gps ON
Wait 1
Pwr_gps = 1





' Begrüßung

Quittierung = "Hallo"


Wait 2
Cam_gnd = 0
Waitms 150
Cam_gnd = 1
Cam_gnd = 0
Waitms 150
Cam_gnd = 1


'--------------------------------------------------------------------------
' Hauptprogramm
'--------------------------------------------------------------------------

Do




'========== hier laufen Tests ab ==========================================

If 20ms_flag = 1 Then

Pulseout Portb , 2 , Servo
20ms_flag = 0

End If



'==========Temperaturmessung mit DS18B20Z 1Wire============================


1wreset

1wwrite &HCC
1wwrite &H44
Waitms 600

1wreset
1wwrite &HCC
1wwrite &HBE


For X = 1 To 9
Temp(x) = 1wread()
Next

Celsius = Makeint(temp(1) , Temp(2))


T = Celsius / 16

Temperatur = Fusing(t , "##.#")



'==========Spannung LiPo 2S messen========================================

Spannung = Getadc(3) ' Zelle messen und berechnen
Zellspannung_orig = Spannung * Adc_multi
Zellspannung_orig = Zellspannung_orig * 2
Zellspannung = Fusing(zellspannung_orig , "#.#")

If Zellspannung_orig <= 6.4 Then ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...
Gosub Lipo_saver_off
End If



'==========Rx Prüfen auf GPS Eingang GPGGA=================================




Gelesen = Inkey(#1)

If Gelesen = 36 Then Input #1 , Gpsdaten Noecho '36 = $
Header = Mid(gpsdaten , 1 , 5)

If Header = "GPGGA" Then
Anzahl2 = Split(gpsdaten , Teilstring(1) , ",")
Gpsdaten = ""
Gpshoehe = Teilstring(10)

End If




'==========Rx Prüfen auf Befehlseingänge==================================

' Inputbin Cmd


If Ischarwaiting() = 1 Then
Cmd = Inkey()
End If


Select Case Cmd

Case "r"
Clear Serialin
Cmd = ""
Quittierung = "rechts"
Call Xbee
A = 160
Compare1a = A
Pan1 = 0
Pan2 = 1
Waitms 70
Pan1 = 0
Pan2 = 0


Case "R"
Clear Serialin
Cmd = ""
Quittierung = "REchts"
Call Xbee
A = 160
Compare1a = A
Pan1 = 0
Pan2 = 1
Waitms 700
Pan1 = 0
Pan2 = 0


Case "l"
Clear Serialin
Cmd = ""
Quittierung = "links"
Call Xbee
A = 160
Compare1a = A
Pan1 = 1
Pan2 = 0
Waitms 70
Pan1 = 0
Pan2 = 0


Case "L"
Clear Serialin
Cmd = ""
Quittierung = "LInks "
Call Xbee
A = 160
Compare1a = A
Pan1 = 1
Pan2 = 0
Waitms 700
Pan1 = 0
Pan2 = 0


Case "+"
Clear Serialin
Cmd = ""
Quittierung = "S1 hoch "

Servo = Servo + 50


'(

Case "U"
Clear Serialin
Cmd = ""
Quittierung = "S1 Hoch "

Servo(1) = S1_links
')

Case "-"
Clear Serialin
Cmd = ""
Quittierung = "S1 runter "

Servo = Servo - 50

'(
Case "D"
Clear Serialin
Cmd = ""
Quittierung = "S1 Runter "

Servo(1) = S1_rechts
')
Case "1"
Clear Serialin
Cmd = ""
Quittierung = "LED "

Cam_gnd = 0
Waitms 150
Cam_gnd = 1


End Select


Call Xbee ' kontinuierliches Senden der Parameter


Loop



End


'----------------Timer2 "20ms" für Servosteuerung-------------------------------

Timer2_irq:

20ms_flag = 1

Timer2 = Timer2vorgabe


Return


'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------

Lipo_saver_off:
Quittierung = "LiPo-Saver!" ' Quittierung an Bodenstation
Quittierung = "" 'Quittierung löschen
Waitms 500

Pwr_video = 0
Pwr_gps = 0
Pwr_all = 0 ' pwr_all off
Led_rot = 1 ' led_rot off

Pwr_atmega = 0 ' atmega8 off

Powerdown

Return


'----------------Sonstiges------------------------------------------------------



Link:

Led_rot = 1

Return



No_link:

Led_rot = 0

Return



Sub Xbee

Print "$GROUND" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe


End Sub

BlaueLed
17.06.2012, 18:07
Hi,

probier mal ein Pulseout von ca. 3000 nur zum Test.

Gruß Kay

for_ro
17.06.2012, 18:14
Hallo Christoph,
Wenn du alle 20ms die Pulseout Ausgabe haben willst, dann darf deine Hauptschleife auf keinen Fall länger laufen.
Waitms 600 geht dann gar nicht. Die Wartezeit für den Sensor musst du dann auch über den Timer machen.
Z.B. in dem du eine zweite Variable hochzählen lässt. Hat sie dann den Wert 30 (20ms * 30 = 600ms) rufst du die Befehle zum Auslesen des Sensors auf.

spelli2001
17.06.2012, 22:10
Hallo,

3000 wirft was aus und die von dir, for_ro, beschriebene Vorgehensweise habe ich umgesetzt.

Allerdings stimmt was nicht mit meinen errechneten Werten!

Ich setze den pulseout-Wert beim Start bspw. auf 2000. Dann erhöhe ich bzw. verringere ich diesen Wert.

Ich konnte so herausfinden, dass ich von ca. 1300 bis 4700 gehen konnte - ab den jeweiligen Werten blockiert dann der Servo bzw. ist er am Anschlag.

In meinem oben geposteten Code schaltet sich die Schaltung (Relais) unter 6,3 Volt anliegender Spannung ab (-> Gosub Lipo_saver_off). Nun konnte ich feststelllen, dass wenn ich Pulseout verwende, sich die Schaltung nach Reset abschaltet. Ich hatte erst eine zu hohe Stromaufnahme des Servos vermutet, aber da verändert sich nichts dran.

Kann Pulseout meine ADC(3) Messung beeinflussen?

Das ganze funktioniert jetzt nur, wenn ich mein "Gosub Lipo_saver_off" auskommentiere...

Gruß
Spelli

spelli2001
19.06.2012, 06:58
Hallo,

vielen Dank für die Antworten. Es funktioniert jetzt alles!

Komisch nur, dass es diese "tausender" Werte sind?

Noch eine weitere Frage:
In der Timer Routine lasse ich jetzt 3 Zaehler hoch laufen, da ich die noch anderweitig verwende. Wann wirds mit vielen "Zählern" problematisch? Weil das werden dann ja irgendwann keine 20ms mehr sein...

BlaueLed
19.06.2012, 12:17
Hi,

ein analoges Servo hat normalerweise ja eine Refreshzeit von 20ms. Aber auch mit ner zeit von 10ms oder 30ms funktionieren die meisten Servos. Allerdings darf die Zeit nicht zu lange werden, da sonst die Stellkraft des Servos verringert wird.

Gruß BlaueLED

spelli2001
27.08.2012, 23:29
Hallo,

ich muss an dieser Stelle nochmal nachfragen:

Also 20ms bei ca. 8 MHz war kein Problem mit dem 8Bit Timer.

Nun Ist es aber so, dass ich die Schaltugn neu aufgebaut habe und diese mit 16 MHz läuft. Da komme ich jetzt aber nur auf 16ms.

Rechne ich bzgl. Pulseout ein bisschen hin und her meine ich diese Werte verwenden zu müssen:

PULSE OUT

4 MHz = 1us
16 MHZ = 4us

links (1000us) mittig (1500us) rechts (2000us)

1000 / 4 = [250] 1500 / 4 = [375] 2000 / 4 = [500]

Ist aber leider nicht von Erfolg gekrönt... Die ganze Geschichte bei 32ms macht auch keinen Sinn... Da wird der Servo vermutl. auch nicht mehr die nötige Stellkraft haben...


Dann habe ich den Timer mit 10ms getestet... Also einen Zähler hochgezählt. Bei 2x gezählten Zähler wollte ich dann pulsout verwenden...

Ich verwende einen 5V Schaltregler (Servo hat eine Betriebsspannung von 7,4 V) der schaltet dann aber ab bzw. stimmt dann da etwas nicht...



Gruß
Christoph

MagicWSmoke
28.08.2012, 17:38
Ein einzelnes Servo lässt sich allein über die Timer1-Hardware steuern, da stört dann auch gar nichts mehr die 1wire.
Allerdings muss der OC1A oder ..B Pin verwendet werden.

spelli2001
28.08.2012, 20:10
Hallo,

Servo ist an OC1B. 16 MHz, Atmega8, Timer0 wird von 1wire genutzt, Timer1 für PWM an L293D für gehackten Servo als Getriebemotor und dann bleibt nur noch Timer2 über... Das klappte auch gut mit 8 MHz...

Mit 16MHz habe ich Probleme...

MagicWSmoke
28.08.2012, 21:39
Ohne Code kann man schwer was sagen, Dir ist aber klar, dass Du bei doppelter Quarzfrequenz die Werte für Pulseout auch verdoppeln musst ?

spelli2001
10.09.2012, 17:17
Hallo,

anbei mein Code.

Ich bekomme kein vernünftiges Pulseout für den 7,4 Volt Servo hin...

bei Bestromen der Schaltung fährt der Servo kurz in seine Ausgangsposition. Dann fährt er augenscheinlich den pulseout-Befehl - und mein Schaltregler (1A kann der) bzw. die Schaltung schaltet sich ab....

Ich bin echt am verzweifeln....

Der Pulseoutbefehl ist unten in der Hauptschleife...



'################################################# ############################
'
' KAPRIG Control RX
' -------------------------------------
'
' Stand: 10.09.2012, ATmega8
'
'
' Volt Temp.Höhe
' Sendesyntax to GROUND: $GROUND#quittierung#7,4#23,1#64
'
' Sendesyntax to KAPRIG: $KAPRIG#cmd
'
'
' system command function
' --------------------------------------------------------------
'
' KAPRIG 0 all off -> power down
'
' KAPRIG 1 video_5,8 GHz on
' KAPRIG 2 video_5,8 GHz off / BIT 2 | BIT1 | BIT0
' KAPRIG a CH1 - 5740 MHz 0 0 0
' KAPRIG b CH2 - 5760 MHz 0 0 1
' KAPRIG c CH3 - 5780 MHz 0 1 0
' KAPRIG d CH4 - 5800 MHz 0 1 1
' KAPRIG e CH5 - 5820 MHz 1 0 0
' KAPRIG f CH6 - 5840 MHz 1 0 1
' KAPRIG g CH7 - 5860 MHz 1 1 0
' KAPRIG h CH7 - 5860 MHz 1 1 1
'
' KAPRIG 3 gps on
' KAPRIG 4 gps off

' KAPRIG 5 pan links
' KAPRIG 6 pan rechts
' KAPRIG 7 pan speed 1
' KAPRIG 8 pan speed 2
' KAPRIG 9 pan speed 3
' KAPRIG i pan speed 4
' KAPRIG j pan speed 5
'
' KAPRIG + tilt up
' KAPRIG - tilt down

' KAPRIG k photo mode, shutter 1x photo
' KAPRIG l photo mode, shutter 2x photo, 1 Sek. Abstand
' KAPRIG m photo mode, shutter 3x photo, 1 Sek. Abstand
' KAPRIG n photo mode, shutter 4x photo, 1 Sek. Abstand
' KAPRIG o photo mode, shutter 5x photo, 1 Sek. Abstand
' KAPRIG p photo mode, shutter alle 2 Sek.
'
' KAPRIG q zoom in
' KAPRIG r zoom out
'
' KAPRIG s video mode, video start
' KAPRIG t video mode, video stop
'
' KAPRIG x LEDs ON
'
'################################################# ############################



'-----------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'-----------------------------------------------------------------------------

$regfile = "m8def.dat"
$crystal = 16000000 ' 16 Mhz Quarz
$hwstack = 64
$swstack = 64
$framesize = 64

$baud = 9600


'-----------------------------------------------------------------------------
' Definition von Ressourcen
'-----------------------------------------------------------------------------

Pwr_all Alias Portc.0 'Abschaltung der Servos und LM2675 (5V für GPS, Video 5,8 GHz Tx)
Pwr_gps Alias Portb.3
Pwr_video Alias Portb.0

Bit0 Alias Portd.7
Bit1 Alias Portd.6
Bit2 Alias Portd.5

5v_usb Alias Portc.2

Led_rot Alias Portc.3
Led_gruen Alias Portc.4
Led_blau Alias Portb.5
Led_weiss Alias Portb.4

Pan_a Alias Portc.5 ' für L293 D
Pan_b Alias Portd.2



'-----------------------------------------------------------------------------
' Definition von Konstanten
'-----------------------------------------------------------------------------

Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0 -> ADC auflösen

Const Timer2vorgabe = 99 ' 10ms 6=16ms

'-----------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'-----------------------------------------------------------------------------

'---- Betriebsspannung messen ----
Dim Spannung As Word
Dim Zellspannung_orig As Single
Dim Zellspannung As String * 5

'---- Commands ----
Dim Quittierung As String * 14
Dim Gpshoehe As String * 13


'---- Command empfangen xxx----

Dim Cmd As Byte



'Dim für GPS einlesen
Dim Gelesen As Byte 'eingelesenes Zeichen

Dim Teilstring(14) As String * 12
Dim Anzahl2 As Byte
Dim Gpsdaten As String * 98
Dim Header As String * 6
'Dim Stunde As Byte
Dim Tempstring As String * 2



'---- Temperaturmessung ----
Dim Temp(9) As Byte
Dim X As Byte
Dim Celsius As Integer
Dim T As Single
Dim Temperatur As String * 5


'---- Zähler etc. ----
Dim Zaehler_1wire As Byte

Dim Zaehler_xbee As Byte

Dim Zaehler_cam As Byte

Dim Chdk As Byte

Dim Zaehler_lipo As Byte

Dim Zaehler_quittierung As Byte
Dim Quittierung_flag As Bit

Dim Zaehler_pwm As Byte

Dim Zaehler_pwm_flag As Bit

'--- Servo ---

Dim 16ms_flag As Bit
Dim Servo As Word

Dim 16ms As Byte

'---- PWM für A293D ----
Dim A As Integer



Dim Zaehler_sec1 As Byte
Dim Zaehler_sec2 As Byte


'-----------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen
'-----------------------------------------------------------------------------

'---- CONFIG ----

' RS232 Hardware
Config Serialin = Buffered , Size = 1 ' konfig serial in
Open "COMD.4:9600,8,N,1" For Input As #1 'PD.4 = RxD SoftUART / GPS


' ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'ADC Wandler definieren

' Timer0 für 1wire

' Timer1 für PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8

' Timer2 für Servosteuerung
Config Timer2 = Timer , Prescale = 1024

' schaltbare Ausgänge
Config Pwr_all = Output ' GPS- und Video-Modul sowie 5 Volt Versorgung hierfür abschalten
Config Pwr_gps = Output
Config Pwr_video = Output

Config Bit0 = Output
Config Bit1 = Output
Config Bit2 = Output

Config 5v_usb = Output

' Status-LED rot
Config Led_rot = Output
Config Led_gruen = Output
Config Led_blau = Output
Config Led_weiss = Output

' L293D für Servo als Motor
Config Portb.1 = Output
Config Pan_a = Output 'LD293
Config Pan_b = Output

' Servo PIN
Config Portb.2 = Output

'1wire für Temp.-Messung
Config 1wire = Portd.3 ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert

'Interrupts
On Timer2 Timer2_irq

Enable Interrupts
Enable Timer1
Enable Timer2

' sonstige
Start Adc
'Declare Sub Xbee ' Senderoutine, um $GROUND#... permanent zu senden

'-----------------------------------------------------------------------------
' Init
'-----------------------------------------------------------------------------


Pwr_all = 1 ' bei Systemstart Peripherie (Relais) auf ON

Led_gruen = 0 ' Led_gruen ON für Betriebszustand

Pwr_video = 0 ' Video OFF
Bit0 = 1 ' damit der Video Tx kein GND erhält, BITs für die Kanäle auf "1"
Bit1 = 1
Bit2 = 1

Pwr_gps = 0 ' GPS OFF

Led_rot = 1 ' Led_rot OFF
Led_blau = 1 ' Led_blau OFF
Led_weiss = 1 ' Led_weiss OFF

Pan_a = 0 ' L293D OFF
Pan_b = 0
A = 150 ' Anfangsgeschwindigkeit für PWM L293D
' Befehlsparameter für "getusb_power" -> CHDK
Chdk = 0

5v_usb = 0 ' Kamera Auslöser für "get_usb_power" OFF

Zaehler_1wire = 0 ' alle 16ms Zaehler auf 0
Zaehler_xbee = 0
Zaehler_cam = 0
Zaehler_lipo = 0
Zaehler_quittierung = 0
Zaehler_pwm = 0

Zaehler_pwm_flag = 1 ' zaehler_pwm_flag auf 1, damit grds. PWM/L293D nur Impuls macht
Quittierung_flag = 1 ' quittierung_flag auf 1, damit grds. Quittierung geleert wird

'Servo = 375 ' Servo Mittelstellung
16ms_flag = 0

Wait 1
Pwr_gps = 1 'nach einer weiteren Sek. Pwr_gps ON



'-----------------------------------------------------------------------------
' Hauptprogramm
'-----------------------------------------------------------------------------

Do



'========== hier laufen Tests ab ==========================================




'==========Temperaturmessung mit DS18B20Z 1Wire============================

1wreset

1wwrite &HCC
1wwrite &H44

If Zaehler_1wire = 38 Then
Zaehler_1wire = 0
Gosub 1wire_temp

End If



'==========Spannung LiPo 2S messen=========================================

Spannung = Getadc(1) ' Zelle messen und berechnen
Zellspannung_orig = Spannung * Adc_multi
Zellspannung_orig = Zellspannung_orig / 0.3333
Zellspannung = Fusing(zellspannung_orig , "#.#")



If Zellspannung_orig <= 6.4 Then ' Zellspannung unter/gleich 6,4 Volt (2x 3,2 Volt) dann...

If Zaehler_lipo > 63 Then
Gosub Lipo_saver_off

End If


Elseif Zellspannung_orig > 6.4 Then
Zaehler_lipo = 0

End If



'==========Rx Prüfen auf GPS Eingang GPGGA=================================




Gelesen = Inkey(#1)

If Gelesen = 36 Then Input #1 , Gpsdaten Noecho '36 = $
Header = Mid(gpsdaten , 1 , 5)

If Header = "GPGGA" Then
Anzahl2 = Split(gpsdaten , Teilstring(1) , ",")
Gpsdaten = ""
Gpshoehe = Teilstring(10)

End If




'==========Rx Prüfen auf Befehlseingänge===================================

If Ischarwaiting() = 1 Then
Cmd = Inkey()
End If




'==========BEFEHLE Auswerten========================================= ======

Select Case Cmd



'----------ALL Power OFF---------------------------------------------------
Case "0"
Clear Serialin
Cmd = ""
Quittierung = "!!!ALL OFF!!!"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Gosub Lipo_saver_off



'----------ALL LEDs ON-----------------------------------------------------
Case "x"
Clear Serialin
Cmd = ""
Quittierung = "all LEDs ON"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Led_rot = 0
Led_blau = 0
Led_weiss = 0

Waitms 1000

Led_rot = 1
Led_blau = 1
Led_weiss = 1



'----------Photo Mode------------------------------------------------------
Case "k"
Clear Serialin
Cmd = ""
Quittierung = "1 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
' Übergabe von "Chdk"-Modus <1> für Zeit-Steuerung "get_usb_power" für CHDK
Chdk = 1


Case "l"
Clear Serialin
Cmd = ""
Quittierung = "2 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Chdk = 2


Case "m"
Clear Serialin
Cmd = ""
Quittierung = "3 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Chdk = 3


Case "n"
Clear Serialin
Cmd = ""
Quittierung = "4 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Chdk = 4


Case "o"
Clear Serialin
Cmd = ""
Quittierung = "5 Photo"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Chdk = 5


Case "p"
Clear Serialin
Cmd = ""
Quittierung = "sec-Photo"
'Zaehler_quittierung = 0
Quittierung_flag = 0
Gosub Xbee

Chdk = 6


Case "q" ' weitere Funktionen CHDK / Canon!
Clear Serialin
Cmd = ""
Quittierung = "zoom in"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Chdk = 7


Case "r" ' weitere Funktionen CHDK / Canon!
Clear Serialin
Cmd = ""
Quittierung = "zoom out"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Chdk = 8



'----------Video On / OFF--------------------------------------------------
Case "1" ' Video ON
Clear Serialin
Cmd = ""
Quittierung = "Video ON"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Pwr_video = 1


Case "2" ' Video OFF
Clear Serialin
Cmd = ""
Quittierung = "Video OFF"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Pwr_video = 0
Bit2 = 1
Bit1 = 1
Bit0 = 1
' Bit2 | Bit1 | Bit0

Case "a" ' BIT: 0 0 0
Clear Serialin ' CH1 5740 MHz
Cmd = ""
Quittierung = "CH1 : 5740MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 0
Bit1 = 0
Bit0 = 0


Case "b" ' BIT: 0 0 1
Clear Serialin ' CH2 5760 MHz
Cmd = ""
Quittierung = "CH2 : 5760MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 0
Bit1 = 0
Bit0 = 1


Case "c" ' BIT: 0 1 0
Clear Serialin ' CH3 5780 MHz
Cmd = ""
Quittierung = "CH3 : 5780MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 0
Bit1 = 1
Bit0 = 0


Case "d" ' BIT: 0 1 1
Clear Serialin ' CH4 5800 MHz
Cmd = ""
Quittierung = "CH4 : 5800MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 0
Bit1 = 1
Bit0 = 1


Case "e" ' BIT: 1 0 0
Clear Serialin ' CH5 5820 MHz
Cmd = ""
Quittierung = "CH5 : 5820MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 1
Bit1 = 0
Bit0 = 0


Case "f" ' BIT: 1 0 1
Clear Serialin ' CH6 5840 MHz
Cmd = ""
Quittierung = "CH6 : 5840MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 1
Bit1 = 0
Bit0 = 1


Case "g" ' BIT: 1 1 0
Clear Serialin ' CH7 5860 MHz
Cmd = ""
Quittierung = "CH7 : 5860MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 1
Bit1 = 1
Bit0 = 0


Case "h" ' BIT: 1 1 1
Clear Serialin ' CH7 5860 MHz
Cmd = ""
Quittierung = "CH7 : 5860MHz"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Bit2 = 1
Bit1 = 1
Bit0 = 1



'----------GPS ON / OFF---------------------------------------------------
Case "3" ' GPS ON
Clear Serialin
Cmd = ""
Quittierung = "GPS ON"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Pwr_gps = 1

Case "4" ' GPS OFF
Clear Serialin
Cmd = ""
Quittierung = "GPS OFF"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Pwr_gps = 0



'----------PAN 360°-------------------------------------------------------
Case "5" ' Motor PAN 360° links
Clear Serialin
Cmd = ""
Quittierung = "PAN links"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Compare1a = A
Pan_a = 1
Pan_b = 0

Zaehler_pwm_flag = 1
Zaehler_pwm = 0


Case "6" ' Motor PAN 360° rechts
Clear Serialin
Cmd = ""
Quittierung = "PAN rechts"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Compare1a = A
Pan_a = 0
Pan_b = 1

Zaehler_pwm_flag = 1
Zaehler_pwm = 0


Case "7" ' Motor PAN 360° Speed 1
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 1"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 160


Case "8" ' Motor PAN 360° Speed 2
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 2"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 180


Case "9" ' Motor PAN 360° Speed 3
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 3"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 200


Case "i" ' Motor PAN 360° Speed 4
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 4"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 220


Case "j" ' Motor PAN 360° Speed 5
Clear Serialin
Cmd = ""
Quittierung = "PAN Speed 5"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee
A = 240



'----------PAN Photo TOUR--------------------------------------------------
Case "X" ' Motor PAN 360° links
Clear Serialin
Cmd = ""
Quittierung = "Photo Tour"
'Zaehler_quittierung = 0
Quittierung_flag = 0
Gosub Xbee
A = 160
Compare1a = A
Pan_a = 1
Pan_b = 0

Zaehler_pwm_flag = 0
'Zaehler_pwm = 0 ' PWM/L293D läuft nun permanent

Chdk = 6




'----------TILT------------------------------------------------------------

Case "+" 'And Servo >= 1500 ' Motor TILT 90° hoch
Clear Serialin
Cmd = ""
Quittierung = "S1 hoch"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Servo = Servo - 30


Case "-" 'And Servo <= 4400 ' Motor TILT 90° runter
Clear Serialin
Cmd = ""
Quittierung = "S1 runter"
Zaehler_quittierung = 0
Quittierung_flag = 1
Gosub Xbee

Servo = Servo + 30



Case Else


If Zaehler_pwm_flag = 1 Then ' PWM / L293D nur abschalten, wenn zaehler_pwm_flag = 1

If Zaehler_pwm > 16 Then ' wenn PWM für 256ms auf L293D
Pan_a = 0
Pan_b = 0

End If

End If

'Chdk = 0



End Select



' --- Befehle für get_usb_power -> CHDK --- === --- === --- === --- === --- ===

Select Case Chdk


Case "0" ' do nothing im Bezug auf Canon CHDK!


Case "1" ' 1 FOTO
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 2 Then ' wenn Zaehler_cam größer 2 bzw. 32ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If


Case "2" ' 2 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 4 Then ' wenn Zaehler_cam größer 4 bzw. 64ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If


Case "3" ' 3 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 6 Then ' wenn Zaehler_cam größer 6 bzw. 96ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If


Case "4" ' 4 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 8 Then ' wenn Zaehler_cam größer 8 bzw. 128ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If


Case "5" ' 5 FOTOS, 1 Sek. Abstand
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 10 Then ' wenn Zaehler_cam größer 10 bzw. 160ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If


Case "6" ' immer Fotos jede Sekunde eines!
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 12 Then ' wenn Zaehler_cam größer 12 bzw. 192ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If


Case "7" ' ZOOM IN
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 14 Then ' wenn Zaehler_cam größer 14 bzw. 224ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If


Case "8" ' ZOOM OUT
5v_usb = 0 ' 5V USB auf HIGH
Zaehler_cam = 0 ' Zaehler_cam auf 0 um im 16ms Takt hochzuzählen!

If Zaehler_cam > 16 Then ' wenn Zaehler_cam größer 16 bzw. 256ms, dann...
5v_usb = 1 ' 5V USB auf Low

End If



End Select



' --- sonstiges ---



If Zaehler_quittierung = 250 Then ' Quittierung nach 2 Sek. leeren


If Quittierung_flag = 1 Then
Quittierung = " connected! " ' kontinuierliches Senden der Parameter

End If

End If



If Zaehler_xbee = 32 Then ' alle 500ms Senden der Parameter
Zaehler_xbee = 0
Gosub Xbee ' kontinuierliches Senden der Parameter

End If



If 16ms_flag = 1 Then 'alle 16ms Impuls an Servo TILT 90°
Pulseout Portb , 2 , 5000
16ms_flag = 0

End If





Loop
End



'----------------Timer2 "10ms" für Servosteuerung-------------------------------

Timer2_irq: ' Interrupts pro Sek. (Frequ.): 62,5
' Interrupt alle 16000 us / 16 ms

Incr Zaehler_1wire ' Zaehler für 1wire-Abfrage
Incr Zaehler_xbee ' Zaehler zum Senden XBee
Incr Zaehler_lipo ' Zaehler um LiPo nach 1 Sekunde Abzuschalten
Incr Zaehler_cam ' Zaehler für CHDK Abschaltung "get_usb_power"
Incr Zaehler_quittierung ' Zaehler für Leeren der Quittierung
Incr Zaehler_pwm ' Zaehler für Dauer PWM
Incr Zaehler_sec1
Incr Zaehler_sec2

Incr 16ms

16ms_flag = 1
Timer2 = Timer2vorgabe


Return



'----------------LiPo-Saver/Abschaltung "Lipo_saver"----------------------------

Lipo_saver_off:
Quittierung = "LiPo-Saver!" ' Quittierung an Bodenstation
Gosub Xbee

Waitms 500

Pwr_video = 0
Pwr_gps = 0

Led_rot = 1
Led_gruen = 1
Led_blau = 1
Led_weiss = 1

Pwr_all = 0 ' pwr_all off

Powerdown

Return


'----------------sonstiges------------------------------------------------------

1wire_temp:

1wreset
1wwrite &HCC
1wwrite &HBE


For X = 1 To 9
Temp(x) = 1wread()
Next

Celsius = Makeint(temp(1) , Temp(2))

T = Celsius / 16

Temperatur = Fusing(t , "##.#")

Return



Xbee:

Print "$GROUND" ; "#" ; Quittierung ; "#" ; Zellspannung ; "#" ; Temperatur ; "#" ; Gpshoehe


Return

spelli2001
10.09.2012, 19:14
Hallo,

soweit läuft es jetzt, anfänglich war mein Lipo Saver ein Problem. Nun schaue ich immer, ob die Spannung für eine gewisse Zeitspanne unter 6.4 Volt fällt, erst dann schalte ich ab.

Ich habe jetzt wiederum ein Problem mit dem "Anfangswert" des Servos. Der scheint nicht immer gleich zu sein? Also die Stellung, die er beim Start anfährt?

ich kann Pulselängen von max. 16,384 ms ausgeben. - wann hat ein Servo seine größte Stellkraft?

spelli2001
11.09.2012, 20:03
Ich bin am verzweifeln.

Wie bekomme ich es hin, einen 7,4 Volt Servo mittels des Timer2 (8 Bit) eines Atmega8 bei 16MHz anzusprechen? Mal läuft der Servo, dann hakt er bzw. hat keine Stellkraft etc.

Aktuell mache ich es so:

Timerstartwert ist 61; Config Timer2 = Timer , Prescale = 1024


If 16ms_flag = 1 Then 'alle 16ms Impuls an Servo TILT 90°
Pulseout Portb , 2 , Servo
16ms_flag = 0

End If

Mit den Werten kann ich aber nicht vernünftig arbeiten...

Danke, ich bin echt am verzweifeln!

Christoph

MagicWSmoke
11.09.2012, 20:38
Ich hätt' gesagt, das Konzept ist verkorkst. Den 16 Bit Timer1 auf 8 Bit PWM zu kastrieren und dann mit dem 8 Bit Timer2 zu versuchen über Pulseout eine Servosteuerung hinzumurksen ist suboptimal.
Man hätte Timer2 für die PWM nehmen können, um mit Timer1 im Modus 14 oder 15 eine völlig auf Hardware basierende Servoansteuerung ohne jedes Gewackel zu bauen. Auch 'ne ISR kann man dranpappen, wenn man 'nen Zeitgeber braucht.
ICR1 oder OCR1A muss als Top verwendet werden, bei 39999 gibt's 20ms, das Servo kann dann mit Werten von 2000-4000 für Compare1A oder ..B von 1-2ms eingestellt werden.

spelli2001
11.09.2012, 20:43
Hallo MagicWSmoke!

Ja, ich habes ja auch schon gemerkt...

Ich kann aber die beiden Pins noch umlöten, sodass ich für PWM (L293D) den Timer2 und dann fürs Servo den Timer1 nehme! Das mache ich jetzt!

spelli2001
11.09.2012, 21:23
Ich habe jetzt den

L293D (PWM) an (Atmega8) PB2, also OC1B und den
Servo an PB1, also OC1A.

Könntest du mir die Hardwarebasierende Ansteuerung des Servo mittels OC1A erläutern?

spelli2001
11.09.2012, 21:30
Mist, Hardware ist ja BP3, also OC2 !!! -- Richtig!?

MagicWSmoke
11.09.2012, 21:51
Das hier sollte einfach auf einen ATM8 umzuschreiben sein:

$Regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 48
$swstack = 32
$framesize = 32

' ### Reine Hardware-Pulserzeugung für ein einzelnes Servo, jitterfrei ###

Const WGM10 = 0
Const WGM11 = 1
Const WGM12 = 3
Const WGM13 = 4

Servopin Alias PortD.4
Config Servopin = Output ' OC1B als Ausgang

Servo_Pos Alias Compare1B ' Stellposition des Servos
Servo_Pos = 3000 ' Defaultposition, 2000 = 1ms, 4000 = 2ms

TCCR1A = Bits(WGM11 , WGM10 , COM1B1) ' Mode 15, Fast PWM, CTC
TCCR1B = Bits(WGM13 , WGM12 , CS11) ' Mode 15, Prescaler 8
COMPARE1A = 39999 ' Obere Zählgrenze
Enable Compare1A

Enable Interrupts

Do
For Servo_Pos = 2000 To 4500 ' Testcode, wechselweise Endpositionen anfahren
Waitus 80
Next Servo_Pos
For Servo_Pos = 4500 To 2000 Step -1
Waitms 1
Next Servo_Pos
Loop

End

20ms_Tick_ISR: ' ISR wir alle 20ms aufgerufen, kann für weitere Zwecke verwendet werden

Return
Bascom benötigt für den ATM8 nicht die Definitionen der WGM..., die sind bereits im .dat drin, können also entfallen. Was geändert werden muss, ist die Pindefinition für OC1B.

spelli2001
11.09.2012, 22:10
Dankeschön.


Soweit verstehe ich das. Die "20ms-Tick-ISR" muss doch aber aber auch aufgerufen werden?

Was ich gerade gar nicht verstehe sind OC1A und OC1B wie stehen die jetzt mit den Timern in Verbindung?

Muss ich den Timer1 im o.g. Code nicht konfigurieren?

Und: was mache ich jetzt mit meinem L293D, den habe ich sonst immer über Compare1a angesprochen!?

Ich bringe gerade alles durcheinander!

Danke.

MagicWSmoke
11.09.2012, 22:19
Die PWM muss per Timer2 gemacht werden. Der Code zeigt einzig, wie man mit dem 16Bit Timer1 ein Servo im Hardwaremode als Fast-PWM ansteuert. Compare1A ist der neue Top-Wert, damit der Zähler eben nicht bis 65535, sondern nur bis 39999 zählt. Denn sonst wären es keine 20ms Wiederholrate, sondern entsprechend mehr. Compare1B sorgt dann für den eigentlichen Servoimpuls.

MagicWSmoke
11.09.2012, 22:41
Du musst noch ein On Compare1A 20ms-Tick-ISR einfügen, das hat sich beim Editieren aus dem Staub gemacht. Timer1 wird direkt über die Timerregister eingestellt, mit dem Config-Befehl könntest Du den Modus 15 nicht einstellen.

spelli2001
11.09.2012, 22:45
Okay. Ich dachte OC1A wäre Timer1 und OC1B Timer2...

Folglich hatte ich auch Compare1A und Compare1B zugeordnet...


Das "Config Timer1 =" fällt weg, da Hardware?

Über "On Timer1 20ms_Tick_ISR" rufe ich die Routine auf?

Wie spreche ich denn dann über den Timer2 den L293D an? Dafür hatte ich immer Compare1A verwendet??????

MagicWSmoke
11.09.2012, 22:52
Wie gesagt, eine PWM auf Timer2, sollte ganz normal per Config Timer2 gehen, muss man nur aufpassen, weil's da kein Compare..A oder B gibt, da's nur ein PWM-Kanal ist.
Config Timer1 fiel weg, da über TCCR1A und TCCR1B der Timer eingestellt wurde.

spelli2001
11.09.2012, 22:57
So Servo läuft soweit! Vielen Dank MagicWSmoke für deine geduldige und ausführliche Erklärung!

An Timer2 mache ich morgen ran!

spelli2001
11.09.2012, 23:03
Ah, Also wird die Timer2 PWM über "OC2" an PB3 des ATM8 ausgegeben?

MagicWSmoke
12.09.2012, 06:29
Ah, Also wird die Timer2 PWM über "OC2" an PB3 des ATM8 ausgegeben?
So steht's im Datenblatt.

spelli2001
12.09.2012, 16:18
Besten Dank! - Problem gelöst!