-
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!!!
-
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.
-
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!
-
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:
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!
-
?
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!