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!!!
Habe es mal so versucht:
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!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
einfachmal Nosave an den On befehl hängen und schauen ob alles noch so läuft wies soll, kann ja nix kaputt gehen.
So, mal schaun wieviel der Code hergibt:
...leider werd ich erst am Freitag dazu kommen, die max. Frequenz zu ermitteln!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
Tada! Hier ist er.... Der Source schafft ne max. Frequenz von ca. 60kHz bei 10Mhz Quarz und einstellbarem Puls- Pausenverhältnis!
Falls jemand ne andere Idee hat, dies in Bscom zu realisieren kann er sich hierzu gerne äusern!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
Lesezeichen