- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 11

Thema: Welcher Controller hat 2 16BIT Timer

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2013
    Beiträge
    23
    Zitat Zitat von for_ro Beitrag anzeigen
    ... 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)

Ähnliche Themen

  1. Zeitmessung via 16bit timer
    Von Martinius11 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 16.09.2010, 17:20
  2. 16bit-PWM mit Timer 1 (Mega 8)
    Von Sauerbruch im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 26.10.2007, 16:36
  3. asm: 16bit durch 16bit dividieren
    Von Benedikt.Seidl im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 10.04.2007, 18:08
  4. Welcher Interrupt hat Vorrang?
    Von Murus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 22.10.2005, 23:30
  5. 16Bit Timer/Counter 1 bei ATmega8 | Hilfe zu den Registern
    Von Sauginius im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 09.06.2005, 15:14

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress