- Akku Tests und Balkonkraftwerk Speicher         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 36 von 36

Thema: PWM mit einstellbarer Frequenz (2313)

  1. #31
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hm, ähnlich meinem Ursprünglichem Prinzip, nur sehr gekürzt würd ich behaupten. Das Prob ist, daß das Programm per Slave-I2C gesteuert werden soll, was (wenn es mal funzt) auch noch Resourcen frisst!
    SHIT!!!
    eigentlich sind es ja nur Zahen......wäre etwas mit "on Goto" vieleicht denkbar!? Oder ne Gleichung, wo nur 0 und 1 Entscheiden muß, wäre schneller. Sch.... daß ich kein Frequenzzähler Zuhause habe!!!
    Beim x51 gibts im ASM-Befehlssatz nen Befehl, der eine Bedingung auf Wert 0 bezieht. Weiß nicht, ob der AVR auch so etwas besitzt.
    Irgendwie ist das kleine Progy schon nen Akt!!!

  2. #32
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    denke nie es wird ein kleines Progy, denn damit liegst du meistens Falsch.Ach ein I²C Slave ist in Bascom nicht gerade geschickt, da man eine speziella LIbix bracuh, und die koste Geld.

  3. #33
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Habe es mal so versucht:

    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    $baud = 9600
    
    Dim Hi As Byte
    Dim Lo As Byte
    Dim Zeit As Byte
    
    Config Pind.2 = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    On Timer1 Icnr
    Enable Timer1
    Timer1 = 65526
    Hi = 1
    Lo = 1
    
    Do
    
        Input "High x mal 1us: " , Hi
        Input "Low x mal 1us: " , Lo
    
    Loop
    
    
    
    Icnr:
    
    Incr Zeit
    
    If Zeit = Hi Then
    
    Swap Hi , Lo
    
    Zeit = 0
    Portd.2 = Not Pind.2
    
    End If
    
    Timer1 = 65526
    
    Return
    Laut sim geht die meiste Zeit beim Return drauf. Hat glaub ich was mit dem sichern der Register zu tun. Da war mal was mit NOSAVE, was ich aber erst mal genauer betrachten muß. Denke, daß es die Lösung ist!

  4. #34
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    einfachmal Nosave an den On befehl hängen und schauen ob alles noch so läuft wies soll, kann ja nix kaputt gehen.

  5. #35
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    So, mal schaun wieviel der Code hergibt:

    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    $baud = 9600
    
    Dim Hi As Byte
    Dim Lo As Byte
    Dim Zeit As Byte
    
    Config Pind.2 = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    On Timer1 Icnr Nosave
    Enable Timer1
    Timer1 = 65526
    Hi = 1
    Lo = 1
    
    Do
    
        Input "High x mal 1us: " , Hi
        Input "Low x mal 1us: " , Lo
    
    
    Loop
    
    
    
    Icnr:
    
    Push r0
    push r4
    push r15
    push r16
    push r19
    push r20
    
    Incr Zeit
    
    If Zeit = Hi Then
    
    Swap Hi , Lo
    
    Zeit = 0
    Portd.2 = Not Pind.2
    
    End If
    
    Timer1 = 65526
    
    pop r20
    pop r19
    pop r16
    pop r15
    Pop r4
    pop r0
    
    
    Return
    ...leider werd ich erst am Freitag dazu kommen, die max. Frequenz zu ermitteln!

  6. #36
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710

    ?

    Tada! Hier ist er.... Der Source schafft ne max. Frequenz von ca. 60kHz bei 10Mhz Quarz und einstellbarem Puls- Pausenverhältnis!

    Code:
    $regfile = "2313def.dat"
    $crystal = 10000000
    $baud = 9600
    
    Dim Hi As Word
    Dim Lo As Word
    Dim Tim1 As Word
    Dim Tim2 As Word
    
    Config Pind.5 = Output
    
    Config Timer1 = Timer , Prescale = 1
    
    Enable Interrupts
    On Timer1 Icnr Nosave
    Enable Timer1
    
    Do
    
        Input "High [1-65535]" , Hi
        Input "Low  [1-65535]" , Lo
    
    Disable Timer1
    Tim1 = Hi
    Tim2 = Lo
    Portd.5 = 1
    Enable Timer1
    
    Loop
    
    
    
    Icnr:
    
    $asm
    in r2, sreg
    'push r0
    'push r1
    push r2
    'push r3
    'push r4
    'push r5
    'push r6
    'push r7
    'push r8
    'push r9
    'push r10
    'push r11
    'push r12
    'push r13
    'push r14
    'push r15
    push r16
    push r17
    'push r18
    push r19
    'push r20
    'push r21
    'push r22
    'push r23
    push r24
    'push r25
    push r26
    'push r27
    'push r28
    'push r29
    'push r30
    'push r31
    $end Asm
    
    Load Timer1 , Tim1
    
    
    Swap Tim1 , Tim2
    Portd.5 = Not Pind.5
    
    
    $asm
    'pop r31
    'Pop r30
    'pop r29
    'pop r28
    'pop r27
    pop r26
    'pop r25
    pop r24
    'pop r23
    'pop r22
    'pop r21
    'pop r20
    pop r19
    'pop r18
    pop r17
    pop r16
    'pop r15
    'pop r14
    'pop r13
    'pop r12
    'pop r11
    'pop r10
    'pop r9
    'pop r8
    'pop r7
    'pop r6
    'pop r5
    'pop r4
    'pop r3
    pop r2
    'pop r1
    'pop r0
    Out Sreg , R2
    $end Asm
    Falls jemand ne andere Idee hat, dies in Bscom zu realisieren kann er sich hierzu gerne äusern!

Seite 4 von 4 ErsteErste ... 234

Berechtigungen

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

Labornetzteil AliExpress