- Labornetzteil AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 36

Thema: Ausführungsgeschwindigkeit: Grundlegende Frage zu Bascom

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Powerstation Test
    @m_herr: 'tschuldige, war ein Unterstellung

    Das ist das, was Bascom draus macht, wer mag, kann die Zyklen zählen, viele sind es ja nicht

    Code:
    ----------------------------------------------
     Ad0 = 0
    ----------------------------------------------
    	LDI	r24,0x00
    	LDI	r25,0x00
    	LDI	XL,0x60
    	LDI	XH,0x00
    	ST	X+,r24
    	ST	X,r25
    
    ----------------------------------------------
          For X = 1 To 16
    ----------------------------------------------
    	LDI	r24,0x01
    	STS	0x0062,r24
    L_0x008C:
    	LDS	r16,0x0062
    	CPI	r16,0x10
    	BRLO	L_0x009A
    	BREQ	L_0x009A
    	JMP	L_0x00D6
    L_0x009A:
    ----------------------------------------------
       Mtemp = Getadc(0)
    ----------------------------------------------
    	LDI	r24,0x00
    	OUT	ADMUX,r24
    	CALL	L_0x00F6
    	LDI	XL,0x63
    	LDI	XH,0x00
    	ST	X+,r24
    	ST	X,r25
    
    ----------------------------------------------
      Ad0 = Ad0 + Mtemp
    ----------------------------------------------
    	LDI	XL,0x60			ad0
    	LDI	XH,0x00
    	LD	r16,X+
    	LD	r17,X
    
    	LDI	XL,0x63			mtemp
    	LDI	XH,0x00
    	LD	r20,X+
    	LD	r21,X
    
    	ADD	r16,r20			add
    	ADC	r17,r21
    
    	LDI	XL,0x60			store ad0
    	LDI	XH,0x00
    	ST	X+,r16
    	ST	X,r17
    
    ----------------------------------------------
      Next X
    ----------------------------------------------
    	LDI	XL,0x62			x
    	LDI	XH,0x00
    	LD	r24,X
    	SUBI	r24,0xFF		+1
    	ST	X,r24			store x
    	BRCC	L_0x00D6		exit for..next
    	JMP	L_0x008C		continue
    L_0x00D6:
    
    ----------------------------------------------
          Shift Ad0 , Right , 4
    ----------------------------------------------
    
    	LDI	r25,0x04
    	LDI	XL,0x60
    	LDI	XH,0x00
    	CALL	L_0x0108
    ----------------------------------------------
    END
    ----------------------------------------------
    	CLI
    L_0x00E2:
    	RJMP	L_0x00E2
    
    ----------------------------------------------
    GETADC()
    ----------------------------------------------
    L_0x00F6:
    	SBI	ADCSR,ADSC
    L_0x00F8:
    	SBIC	ADCSR,ADSC
    	RJMP	L_0x00F8     	wait bit clear
    	SBI	ADCSR,ADSC	set bit
    L_0x00FE:
    	SBIC	ADCSR,ADSC	
    	RJMP	L_0x00FE     	wait bit clear
    	IN	r24,ADCL	read low
    	IN	r25,ADCH	read high
    	RET
    Die meiste Zeit vergeht beim Warten auf den ADC
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209
    Config Adc = Single , Prescaler = 128 , Reference = Avcc

    mh, ich dachte der adc macht mehre khz? also 4mhz/prescaler?
    also 4000000/128=31250hz.
    er müßte da doch die 16messungen nebenbei machen, oder habe ich da was falsch verstanden?

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Nö,der AVR hat genau "Einen" ADC und der kann logischerweise immer nur eine Messung machen.

    Davor ist der Mux der die einzelnen Eingänge mit dem ADC verbindet.

    In Assembler mußte ja jedesmal umschalten da merkt man das.
    Bei Bascom geht das in der Automatisierung leicht unter.

    Dann ist da noch der Umstand das der ADC ja nicht in einem Takt Wandelt (successive approximation) sondern ne gasnze Weile braucht (Parallelwandler sind kaum zu bezahlen wegen dem Aufbau)

    Man kann sagen das ca. bei 16ks/s (Praktisch 15.x ks/s) Ende ist.


    aber ich les jetzt nochmal nach bevor ich Unsinn verbreite.......



    Edit:

    Da ist die Textstelle:

    "each conversion will require 25 ADC clocks."
    Den Rest kannste dir dann ausrechnen.
    Gruß
    Ratber

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    GETADC()
    ----------------------------------------------
    L_0x00F6:
    SBI ADCSR,ADSC
    L_0x00F8:
    SBIC ADCSR,ADSC
    RJMP L_0x00F8 wait bit clear
    SBI ADCSR,ADSC set bit
    L_0x00FE:
    SBIC ADCSR,ADSC
    RJMP L_0x00FE wait bit clear
    IN r24,ADCL read low
    IN r25,ADCH read high
    RET
    Und wenn man das in ein ADC_Ready Interrupt verlagert?
    Auf die Messungen muß er zwar noch warten, er hat dann aber Zeit um was anderes zu machen.

    Gruß Sebastian

    P.S. ach ja und den ADC in Freerunning Modus setzen.

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209
    Gegenfrage :*g

    Wie kann ich so schnell und gut wie es geht 16mal den ADXx auslesen und den Wert in Variable x speichern? Auch in Assembler wenn es sein muß.
    Vielen Dank

  6. #16
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Klar, elegante Leute machen das mit Interrupt und tun derweil was anderes.
    Ist aber ein anderes Konzept, da dann einen Average-Loop drüberzulegen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Code:
    getadc:
      clr ergebnisl
      clr ergebnish
      ldi tmp,(1<<anzahl)
    start:
     sbi ADCSR,ADSC
    warte:
     sbis	ADCSR, ADIF
     rjmp warte
     in	tmp2, ADCL
     add  ergebnisl, tmp2
     in	  tmp2, ADCH
     adc	ergebnish, tmp2
     dec	tmp
     brne  start
     ldi	tmp,anzahl
    teile:
      lsr ergebnish
      ror ergebnisl 
      dec	tmp
     brne teile
     ret
    Das sollte so funktionieren

    tmp und tmp2 sollen 2 Register >= R16 sein
    ergebnisl und ergebnish egal welche
    anzahl ist dann eine konstante, wie oft die Schleife durchlaufen soll.
    In Deinem Fall 16.
    Das Ergebnis steht dann in ergebnisl und ergebnish.
    Der Muxkanal muß auch davor eingestellt werden.
    Das wäre dann pooling, ich finde es aber trotzdem besser, wenn das in ein Interrupt rein käme.
    Ich hoffe, daß Du damit was anfangen kanst.

    Gruß Sebastian
    P.S.
    @Picknick,
    hab ich was falsch gesagt ?

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Beiträge
    209
    puh, das überfordert mich total, war bisher nur auf Bascom ausgelegt...

    da ich aber Icp1 und Ovf1 noch benutze und angst habe, daß es da probleme gibt, habe ich das extra mit der schleife die alle 10ms durchlaufen wird aufgebaut....

  9. #19
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von izaseba
    @Picknick, hab ich was falsch gesagt ?
    Neinnein, alles roger, ist ja richtig. Vom Programmablauf her ist das halt etwas schwieriger.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Ja nu, ich hab nicht gesagt das es einfach ist, aber irgendwas sollte man wirklich auslagern, sonst wartet sich der µC dumm.
    Wie wird eigentlich die Ausgabe realisiert auch mit Warteschleifen?

    Gruß Sebastian

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test