Archiv verlassen und diese Seite im Standarddesign anzeigen : Pulsein Libary ändern aber wie?
Hallo liebe Gemeinde,
Da mein Assembler-Kenntnisse sehr dürftig sind habe ich eine Frage zu Libary mit dem Pulsein-Befehl von Bascom:
Ich würde den Befehl in der Libary gerne so umprogramieren das Pulsein nicht alle 10µs den Zähler erhöht sonden viel schneller wenn möglich alle 3 bis 4µs.
Ist das möglich? Was muß ich hierzu ändern?
tscha, ohne asm kenntnis kann das lustig werden.
however, das da generiert BASCOn bei "PULSEIN"
http://www.rn-wissen.de/index.php/Bascom_Inside-Code#PULSEIN
(etwas dokumentiert)
Und das ist was allgemeines über bascom libraries.
http://www.rn-wissen.de/index.php/Bascom_Libraries
Mach aber auf jeden fall eine Sicherung vom original.
Vielleicht kannst du einfach Bascom durch eine gfälschte $CRYSTAL Angabe beschummeln ?
Und wenn man sich selbst nen Timer in Bascom erstellt mit dem man dann zählen kann?
@PickNick: Das hab ich bereits gelesen, bringt mich aber nicht weiter...
Ich habe den Teil mit PULSE_IN aus der mcs.lib rauskopiert und ne neue Lib erstellt damit ich dran rumbasten kann. Die 10µs lassen sich problemlos erhöhen aber nicht verringern!?
@TobiKa:Kein freier Timer mehr verfügbar bzw nicht brauchbar
Vll über n zusätzliches Quarz an einem Interrupt Eingang den Takt erzeugen?
Du musst versuchen, diese Stelle da zu finden:
PUSH ZL // Save
PUSH ZH
LDI ZL,0x20 // Dieser Wert wurde aus $CRYSTAL berechnet
LDI ZH,0x00
CALL verzögerungs-schleife // 10 µS Idle
POP ZH // Restore
POP ZL
verzögerungs-schleife:
SBIW ZL,0x0001
BRNE L_0x009C
RET
In dem Beispiel lädt bascom den Zähler mit "&H20" , also 32
Bei einem Quartz mit 8MHZ sollte das 10µS ergeben.
Würde man mit "&H10" (16) laden, wären das dann etwa 5 µS-Schritte
Du müstest also für deine Werte anpassen
mh meine Lib sieht ganz anders aus... ich finde keine schleife in meiner lib die einfach runtergezählt wird!?
In einer Zeile steht "@genus(9)" was soll das bedeuten?
@TobiKa: Am µC ist nichts mehr frei, hab sogar den Reset Pin gebraucht...
@RubaSon:
Ich habe mal den wichtigen Teil rauskopiert:
_pulse_in5:
;@genus(9) ; THIS FOR 10 US UNITS but approx. depends on XTAL
; you can remove the above call and tailor this routine
; when remarked 10 cycles/ loop are needed and for 1 Mhz this is 10 uS
; for 4 MHz you need additional 30 cycles and the @genus can be used
; --------------------------------------------------------------------
; routine adapted for 4 MHz (30 cycl.):
Push r17 ; 2 cycl.
Ldi r17,$08 ; waiting 24 cycl.
_pulse_in6:
Dec r17
brne _pulse_in6
nop ; 2 cycl.
nop
Pop r17 ; 2 cycl.
; --------------------------------------------------------------------
; routine adapted for 8 MHz (70 cycl.):
;Push r17 ; 2 cycl.
;Ldi r17,$16 ; waiting 66 cycl.
;_pulse_in6:
;Dec r17
;brne _pulse_in6
;Pop r17 ; 2 cycl.
; --------------------------------------------------------------------
Ld r0,z ; 2 cycl. get pin state
And r0, r24 ; 1 cycl. get only the input pin state
Eor r0,r16 ; 1 cycl. xor with begin state returns zero if the same
Brne _pulse_in_exit ; 2 cycl. ready ,state changed
Adiw xl,1 ; 2 cycl. counter
brne _pulse_in5 ; 2 cycl. again
Die Warteschleife braucht selbst 10 Zyklen, darin muss man dann die Zeit totschlagen. Ich habe mal 2 Schleifen mit 30 bzw. 70 Zyklen für 4 MHz und 8MHz eingefügt. Du müßtest natürlich je nach deinem Quarz weniger Zyklen einfügen, wenn du nur 4µs haben willst.
Gruß Dirk
@all: danke für eure mühe!
Mein rumgebastel an der Lib hat die ganze zeit funktioniert, ich depp hab aber im Programm $crystal = 1200000 drin stehen gehabt dann gehts halt nicht schneller...
Naja wieder was gelernt.
Dachte anfangs mit Bascom hat man ruhe vom asm. aber wie es aus sieht doch nicht. Werd mich doch mal intensiever damit beschäftigen.
Danke nochmals und einen guten Rutsch wünsche ich!!!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.