- Akku Tests und Balkonkraftwerk Speicher         
Seite 21 von 39 ErsteErste ... 11192021222331 ... LetzteLetzte
Ergebnis 201 bis 210 von 386

Thema: .: Projekt Wall E :.

  1. #201
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    Anzeige

    E-Bike
    So, heute hab ich erfolglos versucht mein UART zu laufen zu bekommen und noch erfolgloser versucht meinen AD Wandler am Mega32 zu implementieren. Irgendwie find ich keinen passenden Code, den ich auch verstehe. Immer wieder depremierend wenn man sich in Themen einarbeitet und so gar keine Ahnung hat wie das in der Syntax abzubilden ist.

    Ziemlich depremierend das ganze.

  2. #202
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    31
    Beiträge
    601
    Hi,

    was fürn Problem hast du denn mit der UART? Meinst du den interenen Wandler, oder hast du einen externen?

    Grüße

  3. #203
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    Leider ein sehr unspezifisches.
    Ich hab nen Code aus dem Internet der bei nem Mega32 angeblich ein paar Daten (Strings) über den UART sendet und daten Empfangen kann. Leider zeigt das Hyperterminal nichts an, wenn ich beides anstecke. Also gibt es jetzt mehrere Möglichkeiten für eine Fehler:
    - Programm ist falsch
    - Hardware ist falsch
    - Schaltplan falsch
    - irgendwas anderes falsch
    beides kann ich mangels Erfahrung nicht genauer spezifizieren.

    Code:
    /************************************************************************
    
       SERVO Controller for up to 10 Servos
    
       controlled by serial line
       default: 2400 Baud 8N1
       
       Processor: ATMEGA 8
       CLOCK: 8MHZ, no prescaler set config bits of Atmega 8 correctly !
       
       Compiler: AVR-GCC
    
    
       This code is licensed under the GPL.
       You may modify, redistribute the code .. blabla, you know what I mean ...
    
       Copyright stochri (c.hab@gmx.net) Nov.2005
       
       Warnungen beiseitigt von uwegw
    
    ***************************************************************************/
    #include <stdlib.h>
    #include <inttypes.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    typedef unsigned char byte;
    
    #define SYSCLK 7372800 // timer clock 8Mhz
    #define MAXPULSFREQ 500 // 2ms => 500HZ
    
    #define TIMER_MAXPULS SYSCLK/MAXPULSFREQ // Timer1 value for a 2ms Puls
    
    #define MINPULS TIMER_MAXPULS/4  // min pulslength = 0.5ms
    #define MAXPULS TIMER_MAXPULS // max pulslength=2ms
    
    // port pin definitions
    // you may redefine the pins to suit your application
    // tale a look at the interrupt routine and enable the cases for your servo
    
    #define LOW_SERVO0 PORTD&=~(1<<6)
    #define HIGH_SERVO0 PORTD|=(1<<6)
    
    #define LOW_SERVO1 PORTB&=~(1<<0)
    #define HIGH_SERVO1 PORTB|=(1<<0)
    
    #define LOW_SERVO2 PORTB&=~(1<<1)
    #define HIGH_SERVO2 PORTB|=(1<<1)
    
    #define LOW_SERVO3
    #define HIGH_SERVO3
    
    #define LOW_SERVO4
    #define HIGH_SERVO4
    
    #define LOW_SERVO5
    #define HIGH_SERVO5
    
    #define LOW_SERVO6
    #define HIGH_SERVO6
    
    #define LOW_SERVO7
    #define HIGH_SERVO7
    
    #define LOW_SERVO8
    #define HIGH_SERVO8
    
    #define LOW_SERVO9
    #define HIGH_SERVO9
    
    
    uint16_t Pulslength[20]; // array for all delays
    
    /************************************************************************
    
       SIGNAL(SIG_OVERFLOW1)
       timer1 interrupt, generates the high and low pulses for each servo
    
    ***************************************************************************/
    SIGNAL(SIG_OVERFLOW1)
    {
       static byte servoindex_half=0;
    
       switch (servoindex_half)
       {
          case 0: HIGH_SERVO0; break;
          case 1: LOW_SERVO0; break;
          case 2: HIGH_SERVO1; break;
          case 3: LOW_SERVO1; break;
          case 4: HIGH_SERVO2; break;
          case 5: LOW_SERVO2; break;
    //      case 6: HIGH_SERVO3; break;
    //      case 7: LOW_SERVO3; break;
    //      case 8: HIGH_SERVO4; break;
    //      case 9: LOW_SERVO4; break;
    //      case 10: HIGH_SERVO5; break;
    //      case 11: LOW_SERVO5; break;
    //      case 12: HIGH_SERVO6; break;
    //      case 13: LOW_SERVO6; break;
    //      case 14: HIGH_SERVO7; break;
    //      case 15: LOW_SERVO7; break;
    //      case 16: HIGH_SERVO8; break;
    //      case 17: LOW_SERVO8; break;
    //      case 18: HIGH_SERVO9; break;
    //      case 19: LOW_SERVO9; break;
       }
    
       
       TCNT1 =Pulslength[servoindex_half]; // set time for next interrupt   
    
        servoindex_half++; // increment timervalue index
       if(servoindex_half==20)servoindex_half=0;   // reset index
    }
    /************************************************************************
    
       void setservo(byte index, byte value)
    
       Set servo position
       value: 0..255
    
    ***************************************************************************/
    
    void setservo(byte index, byte value)
    {
       uint16_t wert;
    
       wert=MINPULS+(MAXPULS-MINPULS)/256*value;
       
       // callculate hightime
       Pulslength[index<<1]=0-wert;
       
       // sume of low and hightime for one servo is 2ms
       Pulslength[(index<<1)+1]=0-(TIMER_MAXPULS-wert);
       
       // 10 Servos give you 10*2ms=20ms total cycle time
    }
    
    /************************************************************************
    
       void init_servos()
       
       initialize all Servos to the start position
    ***************************************************************************/
    void init_servos(void)
    {
       byte n;
       for(n=0;n<10;n++) setservo(n,128);
    };
    
    /************************************************************************
    
       void init(void)
       initialize the prozessor registers
    ***************************************************************************/
    
    void init(void)
    {
       // prepare RS232
       UCSRA = 0x00;
       UCSRB = 0x00;   
       UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
       UBRRL = 0xbF; // 2400bps @ 7,372800Mhz 
    //   UBRRL = 0xCF; // 2400bps @ 8.00MHz
    //   UBRRL = 51; // 9600bps @ 8.00MHz
    //   UBRRL = 25; // 19200bps @ 8.00MHz
    
        /* initialize ports */
        DDRB = 0xFF;
        DDRC = 0xFF;
        DDRD = 0xFF;
        PORTB = 0x00;
        PORTC = 0x00;
        PORTD = 0x00;
    
        // init timer1
       TCNT1 = 0-16000;
       TCCR1A=0;
       TCCR1B=0x01;
        TIMSK |= _BV(TOIE2) | _BV(TOIE1);
    
        /* allow interrupts */
        sei();
    }
    
    /************************************************************************
    
       serial communication
    
    ***************************************************************************/
    
    byte chgetchar(void)
    {
       UCSRB = 0x10; // enable receiver
       while(!(UCSRA & 0x80)); // wait for received byte
       return UDR;
    }
    
    void chputchar(byte zeichen)
    {
       UCSRB = 0x08; // enable transmitter
       UCSRA|=0x40; // clear transmitter flag
       while (!(UCSRA & 0x20)); // wait for empty transmit buffer
       UDR = zeichen;
       while (!(UCSRA & 0x40)); // Wait for transmit complete flac (TXC)
    }
    void chSerPrint(char *data)
    {
       unsigned char i = 0;
       while(data[i]!=0x00) chputchar(data[i++]);
    }
    
    /************************************************************************
    
       main programm
    
       servo controll by RS232 interface
    
    ***************************************************************************/
    
    int main(void)
    {
       char c;
       byte n;
       byte servos[10];
    
       init();
       init_servos();
       
       chSerPrint("\n\r-- Atmega8 servo controller V1.0 --\n\r");
       chSerPrint("Connection OK\n\r");
    
       while(1)
       {
       
          // get key from terminal
          c=chgetchar();
    
          if(c=='q') servos[0] += 10;
          if(c=='w') servos[0] -= 10;
          if(c=='a') servos[1] += 10;
          if(c=='s') servos[1] -= 10;
          if(c=='y') servos[2] += 10;
          if(c=='x') servos[2] -= 10;
    
          // set to default position, if space is pressed
          if(c==' ')
          {
             servos[0] = 128;
             servos[1] = 128;
             servos[2] = 128;
          }
    
          for(n=0;n<10;n++) setservo(n,servos[n]);
       }
    }
    und die Hardware schaut so aus:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_185.jpg   schaltplan_354.jpg  

  4. #204
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.01.2005
    Ort
    HH
    Beiträge
    215
    Hallo,

    im Kopf steht, dass der Code für einen MEGA8 ist, aber das sollte eigentlich nicht so das Problem sein. Ich würde an deiner Stelle erstmal klein anfangen und alles rausschmeißen, bis auf das UART senden und kontinuierlich ein Zeichen senden und dann mal checken, ob er läuft. Vllt. hast Du auch ein paar LED's an einem Port, die Du blinken lassen kannst, damit Du auch sicher weißt das er läuft?
    Vielleicht hängt der ja irgendwo anders. Evtl. mal die eingestellten Register mit denen im Datenblatt vergleichen, ob auch alles richtig eingestellt ist (Baudrate, Parity, Anzahl Datenbits....)

    Wenn immer noch nichts ankommt, mal an TxD messen.

    Das hier hat mir auch sehr geholfen:
    http://www.mikrocontroller.net/artic...n_mit_dem_UART
    (ist jetzt nicht neu, ich weiß

    Da ist übrigens kein Schaltplan...

  5. #205
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    ich werd noch wahnsinnig mit der Forumsfunktion. Erst wars kein Schaltplan, dann hatte er den Schaltplan zweimal drin und jetzt wieder gar nicht mehr. Ich edditier gleich mal den Beitrag oben und füg den Schaltplan nochmal ein.

    @themaddin ist leichter gesagt als getan, alles rauswerfen was man für UART nicht benötigt, denn ich kenn mich mit AVR-GCC noch gar nicht aus. Ich bin froh dass ich für die meisten Probleme Beispieltexte finde und mit denen meine Funktionen zusammen klicken kann.

  6. #206
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    hi,
    sag aml ahst du jetzt schon was für dein ortungssystem?
    sonst schau dir mall bei pollin.de die artikelnr.: 40-120 404 an
    hab ich gerade beim durchstöbern den katalogen gefunden

  7. #207
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    31
    Beiträge
    601
    Hi,

    oder du versuchst du Testzwecken einfach mal Bascom. Da kannst du den UART ganz bequem einrichten und Daten versenden. Wenns damit dann nicht funktioniert, hast du wahrscheinlich nen Hardwarefehler.


    Viele grüße

  8. #208
    Erfahrener Benutzer Roboter Experte Avatar von marvin42x
    Registriert seit
    02.08.2005
    Ort
    Berlin
    Alter
    76
    Beiträge
    703
    In Bascom hätte ich auch einiges an Lösungen zu bieten.

    Netter Gruß
    Die ersten zehn Millionen Jahre waren die schlimmsten. Und die zweiten Zehn Millionen Jahre, die waren auch die schlimmsten.url

  9. #209
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    42
    Beiträge
    4.534
    Blog-Einträge
    1
    Wenn ich wieder aus dem Urlaub bin, dann kümmer ich mich drum und damit die Zeit euch nicht so lange wird, hier noch ein link zu den aktuellen Bildern:

    http://www.hs-augsburg.de/~hanno/Rob...bs%20Wall%20E/

    viel spass und bis in einer Woche.

  10. #210
    Erfahrener Benutzer Robotik Einstein Avatar von Klingon77
    Registriert seit
    26.09.2006
    Ort
    Hunsrück
    Alter
    63
    Beiträge
    2.543
    hi HannoHupmann,

    immer wieder schön, Deine Arbeiten anzuschauen \/

    Im Innern ist doch noch jede Menge Platz.
    Da sollte doch der Akku und die Intelligenz locker reinpassen.

    Hast du bei deinem Antrieb an den Kegelrädern keine Probleme mit der Wellendurchbiegung? Macht sich da etwas beim anfahren oder Bremsen bemerkbar?

    Wie verhält sich das Dibond der Ketten-Halterung in Bezug auf Seitenkräfte? Ist es steif oder merkt man eine Nachgiebigkeit?
    Sollte eigentlich steif genug sein, denke ich. Du hast es ja auch doppelt ausgelegt.


    liebe Grüße,

    Klingon77
    Der kürzeste Weg zwischen zwei Menschen ist ein Lächeln - http://www.ad-kunst.de

Seite 21 von 39 ErsteErste ... 11192021222331 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen