- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Schrittmotor, PWM, Anfahrkurve und Bremskurve

  1. #11
    Neuer Benutzer
    Registriert seit
    04.11.2015
    Ort
    35606 Solms
    Beiträge
    2
    Anzeige

    E-Bike
    Frage:
    Hat die von Brundle angehängte Datei "main_101.c" etwas mit Schrittmotoren zu tun?

    Ich möchte das Ganze mal ausprobieren, habe bisher vorwiegend Microchip Pic programmiert. Gibt es ein fertiges Projekt, was man z.B. mit AVR Studio öffnen und anschauen kann?

    Gruß Rothhp

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Willkommen im Forum,
    Hast du dir den Thread durchgelesen? Dann solltest du dir die Antwort selbst geben können.

    MfG Hannes

  3. #13
    Neuer Benutzer
    Registriert seit
    04.11.2015
    Ort
    35606 Solms
    Beiträge
    2
    Ich meine diese File. Da seht nichts von Motor oder Schritten usw. Nur von Memorycells und sram. Ich denke da liegt eine Verwechslung vor. Wenn noch an anderer Stelle im Forum darüber geschrieben ist, dann bitte mal einen Link setzen.

    #include"lcd_i2c.h"
    #include"i2cmaster.h"
    #include "define.h"
    #include <avr/io.h>
    #include <stdio.h>



    #define OFFSET 0x1100

    #define SET_SRAM1 {PORTF |= (1<<PF1); PORTF &= ~(1<<PF0);}
    #define SET_SRAM2 {PORTF |= (1<<PF0); PORTF &= ~(1<<PF1);}

    #define BANK_0 {PORTF &= ~(1<<PF4); PORTF &= ~(1<<PF3); PORTF &= ~(1<<PF2);}
    #define BANK_1 {PORTF &= ~(1<<PF4); PORTF &= ~(1<<PF3); PORTF |= (1<<PF2);}
    #define BANK_2 {PORTF &= ~(1<<PF4); PORTF |= (1<<PF3); PORTF &= ~(1<<PF2);}
    #define BANK_3 {PORTF &= ~(1<<PF4); PORTF |= (1<<PF3); PORTF |= (1<<PF2);}
    #define BANK_4 {PORTF |= (1<<PF4); PORTF &= ~(1<<PF3); PORTF &= ~(1<<PF2);}
    #define BANK_5 {PORTF |= (1<<PF4); PORTF &= ~(1<<PF3); PORTF |= (1<<PF2);}
    #define BANK_6 {PORTF |= (1<<PF4); PORTF |= (1<<PF3); PORTF &= ~(1<<PF2);}
    #define BANK_7 {PORTF |= (1<<PF4); PORTF |= (1<<PF3); PORTF |= (1<<PF2);}


    void xram(void) __attribute__ ((naked)) __attribute__ ((section (".init1")));

    void xram(void)
    {
    MCUCR |= (1<<SRE)|(1<<SRW10); // The SRE Bit will activate the memory interface of the ATmega128
    // The SRW11 and SRW10 bits control
    XMCRA |= (1<<SRW11); // the number of wait-states

    XMCRB |= (1<<XMBK); // Enable the buskeeper, witch ensure a definied logic level
    // on the lines AD7:0, otherwise they will be tri-stated
    // Remember: if you disable the memory Interface, don´t forget
    // to disable the buskeeper too.
    }

    //************************************************** ************************************************** **************
    //The function memwrite fills up a memorybank of the selected SRAM
    //alternate with 0x55 and 0xaa
    //************************************************** ************************************************** **************
    void memwrite(void)
    {
    unsigned char *pwrite = (unsigned char *) (OFFSET + 0); // Pointer to a unsigned char with the adress 0x1100
    unsigned int count = 0;
    for(count=0; count<= (0xFFFF-OFFSET); count++) // until the end of the memory
    {
    if(count%2) // odd memorycells
    pwrite[count]=0x55;
    else // even memorycells
    pwrite[count]=0xaa;
    }
    }

    //************************************************** ************************************************** **************
    //The function memread checks a memorybank of the selected SRAM
    //if the cells has alternate values of 0x55 and 0xaa
    //************************************************** ************************************************** **************
    unsigned int memread(void)
    {
    unsigned char *pread = (unsigned char *) (OFFSET + 0); // Pointer to a unsigned char with the adress 0x1100
    unsigned int count = 0;
    unsigned char error = 0;
    do
    {
    if(count%2) // odd memorycells
    {
    if(pread[count]!=0x55) // Memorycell dosen´t contain the desired value
    error = 1;

    }
    else // even memorycells
    {
    if(pread[count]!=0xaa) // Memorycell dosen´t contain the desired value
    error = 1;

    }
    count++;
    }while((count<=(0xFFFF-OFFSET))&&(error == 0)); // Ends with error or the last memorycell

    if(error)
    {
    return(count); // Memorycell "count" has a wrong value
    // 1 <= count <= 0xef00
    }
    else
    {
    return(0); // no problems at all
    }
    }

    //************************************************** ************************************************** **************
    //The function memtest uses the functions memwrite and memread.
    //If the cells has a wrong value, it returns the number of the cell
    //If there is no problem it returns a Zero
    //************************************************** ************************************************** **************
    unsigned int memtest(void)
    {
    unsigned int i = 0;
    memwrite();
    i = memread();
    return(i);
    }

    //************************************************** ************************************************** **************
    //The function error_diplay only shows the memorycell with the wrong value inside
    //************************************************** ************************************************** **************
    void error_display(unsigned char SRAM, unsigned char BANK, unsigned int MEMORYCELL)
    {
    lcdi2c_ausgabexy("SRAM -> Bank ",0,0);
    lcdi2c_ausgabenummer(SRAM, 5, 0);
    lcdi2c_ausgabenummer(BANK, 15, 0);
    lcdi2c_ausgabexy("Fehler beim Auslesen",0,1);
    lcdi2c_ausgabexy("Speicherzelle: ",0,2);
    lcdi2c_ausgabenummer(MEMORYCELL, 20, 2);
    }

    int main(void)
    {
    UCHAR x = 0;
    unsigned int MEMORYCELL = 0;

    i2c_init(); // initialitze the I2C-Bus

    x = lcdi2c_init(); // checks the display

    PORTF |= (0<<PF7)|(0<<PF6)|(0<<PF5)|(0<<PF4)|(0<<PF3)|(0<<P F2)|(1<<PF1)|(1<<PF0);
    DDRF |= (0<<PF7)|(0<<PF6)|(0<<PF5)|(1<<PF4)|(1<<PF3)|(1<<P F2)|(1<<PF1)|(1<<PF0);
    // Belegung PORTF
    //
    // PF0: /CE SRAM 1
    // PF1: /CE SRAM 2
    // PF2: Adressleitung 16
    // PF3: Adressleitung 17
    // PF4: Adressleitung 18
    // PF5: Frei
    // PF6: Frei
    // PF7: Frei

    SET_SRAM1
    BANK_0
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,0 , MEMORYCELL);
    else
    {
    BANK_1
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,1 , MEMORYCELL);
    else
    {
    BANK_2
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,2 , MEMORYCELL);
    else
    {
    BANK_3
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,3 , MEMORYCELL);
    else
    {
    BANK_4
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,4 , MEMORYCELL);
    else
    {
    BANK_5
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,5 , MEMORYCELL);
    else
    {
    BANK_6
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,6 , MEMORYCELL);
    else
    {
    BANK_7
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 1,7 , MEMORYCELL);
    else
    {
    SET_SRAM2
    BANK_0
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,0 , MEMORYCELL);
    else
    {
    BANK_1
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,1 , MEMORYCELL);
    else
    {
    BANK_2
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,2 , MEMORYCELL);
    else
    {
    BANK_3
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,3 , MEMORYCELL);
    else
    {
    BANK_4
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,4 , MEMORYCELL);
    else
    {
    BANK_5
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,5 , MEMORYCELL);
    else
    {
    BANK_6
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,6 , MEMORYCELL);
    else
    {
    BANK_7
    MEMORYCELL = memtest();
    if(MEMORYCELL)
    error_display( 2,7 , MEMORYCELL);
    else
    {
    lcdi2c_ausgabexy("Speicherzellen OK!",0,0); //Output on display
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }



    while(1)
    {

    }
    }

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Sorry, dachte das das der gleiche Quellcode wie darüber ist (konnte es am smartphone nicht öffnen) .

    1) das hat nichts mit Schrittmotoren zu tun
    2) das ist nicht für einen Atmega 32 (der Atmega 32 hat keinen Port F)

    MfG Hannes

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen