- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: Takt dür den Schrittmotor erzeugen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    31.03.2010
    Beiträge
    33

    Takt dür den Schrittmotor erzeugen

    Anzeige

    Praxistest und DIY Projekte
    hallo leute,
    ich habe ein Programm geschrieben, mit dem will ich ein Takt über Poti erzeugen, aber leider hat es nicht funktionnier ich weiß nicht ob das an meinem Hardware liegt oder oder an dem programm: hier ist das Programm:

    Code:
    .include "m88def.inc"
    
    ; Anschlüße Port B
    ; PB0   Drehichtung
    ; PB1   Enable
    ; PD5 Takt
    ; PB4,PB5 sind Schalter
    ; Alle Anderen nicht belegt.
    
    .def ADClow=r6
    .def ADChigh=r7
    .def rlow=r8
    .def temp=r16        ;;temporäres Register (initialisierung, PortAusgabe)
    .def temp2=r17
    .def temp3=r18
    
    
    
    
    
                                                                    
    
    
       
       
    
    
    
    
    
    
    ;Registerzuweisung-------------------------------------------------------
    
    
    ;Interrupt Vektor Tabelle
    
    
        rjmp RESET ; PCINT0 Handler
    .org 0x003
    	rjmp Reset; PCINT0_7
        rjmp RESET ; PCINT1 Handler
        rjmp RESET ;PCINT2 ; PCINT2 Handler
        rjmp RESET ;WDT ; Watchdog Timeout Handler
        rjmp RESET ;TIM2_COMPA ; Timer2 CompareA Handler
        rjmp RESET ;TIM2_COMPB ; Timer2 CompareB Handler
        rjmp RESET ;TIM2_OVF ; Timer2 Overflow Handler
        rjmp RESET ;TIM1_CAPT ; Timer1 Capture Handler
        rjmp RESET ;TIM1_COMPA ; Timer1 CompareA Handler
        rjmp RESET ;TIM1_COMPB ; Timer1 CompareB Handler
        rjmp RESET ;TIM1_OVF ; Timer1 Overflow Handler
        rjmp RESET ;TIM0_COMPA ; Timer0 CompareA Handler
        rjmp RESET ;TIM0_COMPB ; Timer0 CompareB Handler
        rjmp RESET ;TIM0_OVF ; Timer0 Overflow Handler
        rjmp RESET ;SPI_STC ; SPI Transfer Complete Handler
        rjmp RESET ;USART0_RXC ; USART0 RX Complete Handler
        rjmp RESET ;USART0_UDRE ; USART0,UDR Empty Handler
        rjmp RESET ;USART0_TXC ; USART0 TX Complete Handler
        rjmp RESET ;ADC_CP ; ADC Conversion Complete Handler
        rjmp RESET ;EE_RDY ; EEprom Ready Handler
        rjmp RESET ;ANA_COMP ; Analog Comparator Handler
        rjmp RESET ;TWI ; 2-Wire Serial Interface Handler
        rjmp RESET ;SPM_RDY ; Store Programm Memory Ready Handler
    
    ;------------------------------------------------------------------------
    ;Initialisierung---------------------------------------------------------
    ;------------------------------------------------------------------------
    
    
    reset:
            ; Stackpointer initialisieren
            ldi     temp, LOW(RAMEND)    
            out     SPL, temp
            ldi     temp, HIGH(RAMEND)
            out     SPH, temp
    
    ;****************************************************************************
    ;* Timer0 initialisierung
    ;****************************************************************************
    Tim0_init:
    		;* Timer0-Einstellung
    		ldi	temp,(1<<com0b1)|(0<<com0b0)|(1<<WGM01)|(1<<WGM00); FastPWM, OC0A-nc
    		out	TCCR0A,temp	;..und ausgeben
    		ldi	temp,(1<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00)	;Taktvorteiler /64+FastPWM..
    		out	TCCR0B,temp	;..aktivieren
    		ldi	temp,255
    		out	OCR0A,temp	;Maxwert
    		ldi	temp,0
    		out	OCR0B,temp	;Vergleichswert
    
    
     
    ;portd 5-7 auf Ausgang schalten
            ldi        temp,0b11110000
            out        ddrd,temp
    ;portb 0-3 auf Ausgang schalten
            ldi        temp,0b00001111
            out        ddrb,temp
    
    		     
    
    ;      ADC Kanal und V_ref wählen
       		 ldi  temp,(1<<REFS0)|(0<<REFS1)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0)|(1<<ADLAR)
       		 sts  ADMUX,temp
        ; Digitaleingabepuffer des Pins deaktivieren
      		  ldi  temp,(1<<ADC0D)
     		   sts  DIDR0,temp
    
        ; ADC aktivieren + starten, VT=32
       		 ldi temp,(1<<ADEN)|(1<<ADSC)|(0<<ADIE)|(1<<AdPS2)|(0<<ADPS1)|(1<ADPS0)
        	sts  ADCSRA,temp
    
    
    
    ;------------------------------------------------------------------------
    ;Hauptprogramm-----------------------------------------------------------
    ;------------------------------------------------------------------------
    Main:
        rcall    adc_single
        sts      OCR0b,ADChigh
    
        sbic    pinb,pb4
        sbi     portb,pb0
        sbis    pinb,pb4
        cbi     portb,pb0
    
       
        sbic    pinb,pb5
        sbi     portb,pb1
        sbis    pinb,pb5
        cbi     portb,pb1
    
    rjmp main
    
    ;------------------------------------------------------------------------
    ;Hauptprogramm----------------------------------------------------------E
    ;------------------------------------------------------------------------
    
    
    
    
    
    
    ;Einen   Wert auslesen
    
    ADC_single:
        rcall    ADC_WAIT_CLEAR
    rjmp  ADC_read
    
    
    ;Einen Einzelnen Wert auslesen
    
    
    
    
    
    ;------------------------------------------------------------------------
    ;ADC aktivieren
    ADC_START:
    
    
    
    ADC_WAIT_CLEAR:
        ; Warten bis der ADC bereit ist
        lds  temp,ADCSRA
        sbrc temp,ADSC
        rjmp ADC_Wait_Clear
    ret
     
    ADC_read:
        lds        ADClow, ADCL
        lds        ADChigh, ADCH
    
    
    
    
    ret
    Code-Tags verwenden ! (PicNick, Mod)

    ich bitte um Hilfe seite 2 Tage habe ich nach Fehler gesucht und trotzdem ohen Erfolg.
    danke

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    08.04.2009
    Ort
    an der Ostsee
    Beiträge
    334
    moin moin,

    ich kenne kein avr, beschreibe doch erstmal mit Worten was genau Du machen möchtest, erstelle mal einen PAP.

    Mit gruß
    Peter

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    31.03.2010
    Beiträge
    33
    danke für deine Antwort,
    also über eine Poti gebe ich einen analogen Wert ein, und die wird über ADC Wandler in Digitale Wert konvertiert. Und diese Wert soll die Top Wert in Timer0(OCBR0), der Timer wird bis diesem Wert zählen dann wird er zurückgesetzt, dann werde ein Rechtecksignal bekommen, und das gebe als Takt für meinen Schrittmotor.
    Ist es jetzt klar?
    danke

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    IO-Register (ADMUX, etc.) sollte man mit IN lesen und mit OUT schreiben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    08.04.2009
    Ort
    an der Ostsee
    Beiträge
    334
    teile das Program, lasse das mit der Analogeingabe erstmal weg.
    Kannst Du mit einem Zahlenwert einen Ausgangstakt erzeugen?

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Als PIC Benutzer kann ich dir bei AVR softwaremässig nicht helfen. Aus eigener Ehrfahrung mit µC bin ich aber sicher, dass mit ASM sich fast jede Impulsenfolge (laut Datenblatt) für die zu steuernder Hardware generieren lässt.

    Die Steuerung für ein Schrittmotor ist ziemlich kompliziert, weil jede Spule exaxt zeitlich ein- und ausgeschaltet werden muss, wenn kein entsprechender Treiber, der nur Takt benötigt, verwendet wird.

    MfG

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    31.03.2010
    Beiträge
    33
    Zitat Zitat von Peter1060
    teile das Program, lasse das mit der Analogeingabe erstmal weg.
    Kannst Du mit einem Zahlenwert einen Ausgangstakt erzeugen?
    danke das werde ich tun.

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von PicNick
    IO-Register (ADMUX, etc.) sollte man mit IN lesen und mit OUT schreiben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    31.03.2010
    Beiträge
    33
    Zitat Zitat von PicNick
    Zitat Zitat von PicNick
    IO-Register (ADMUX, etc.) sollte man mit IN lesen und mit OUT schreiben.
    mit atmega 88 geht nur mit ldi, und sts...

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ah ja, da hast du recht.
    da müssen wir was anderes finden
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

12V Akku bauen