-         

Ergebnis 1 bis 9 von 9

Thema: Pulsein Libary ändern aber wie?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.12.2010
    Beiträge
    7

    Pulsein Libary ändern aber wie?

    Anzeige

    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?

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    tscha, ohne asm kenntnis kann das lustig werden.

    however, das da generiert BASCOn bei "PULSEIN"
    http://www.rn-wissen.de/index.php/Ba...e-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 ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Und wenn man sich selbst nen Timer in Bascom erstellt mit dem man dann zählen kann?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    09.12.2010
    Beiträge
    7
    @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

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Vll über n zusätzliches Quarz an einem Interrupt Eingang den Takt erzeugen?

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du musst versuchen, diese Stelle da zu finden:
    Code:
    	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
    Code:
    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
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    09.12.2010
    Beiträge
    7
    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...

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    @RubaSon:
    Ich habe mal den wichtigen Teil rauskopiert:
    Code:
    _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

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    09.12.2010
    Beiträge
    7
    @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!!!

Berechtigungen

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