- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: der ASURO RP6

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3

    der ASURO RP6

    Anzeige

    Praxistest und DIY Projekte
    Hallo Zusammen,

    in diesem Thread werde ich einen kleinen Frevel begehen, nämlich ( zumindest in Ansätzen ) das RP6-Betriebssystem durch die ASURO-Lib zu ersetzen. Damit wird der RP6 sozusagen ein ASURO mit Ketten.
    Meiner Meinung nach ist es die beste Möglichkeit, sich mit einem neuen System zu beschäftigen, in dem man die bisherigen Erfahrungen nutzen kann. Und da ich nun einmal relativ viel Erfahrungen mit dem ASURO habe, möchte ich einige Programme auf den RP6 übertragen. Dazu ist es notwendig, dass ein ASURO-kompatible Library existiert.

    Für Anfänger, die schon einige Erfahrungen mit dem ASURO haben ist es mit der Verwendung einer solchen Library natürlich besonders einfach, Programme für den RP6 zu schreiben, da keine neuen Befehle gelernt werden müssen.

    Hier also der Code für asuro.c und asuro.h:
    Code:
    //*********** ASURO Library modified for RP6 *****************************
    //
    // asuro.c
    //
    //************************************************************************
    #include "asuro.h"
    #include "string.h"
    
    volatile unsigned char count36kHz;	
    volatile unsigned long timebase;
    
    SIGNAL (SIG_OVERFLOW2)
    {
    	TCNT2 += 0x25;
    	count36kHz ++;
    	if (!count36kHz) timebase ++;
    }
    
    
    /* Set motor speed */
    inline void MotorSpeed(unsigned char left_speed, unsigned char right_speed)
    {
    	OCR1A = left_speed;
    	OCR1B = right_speed;
    }
    
    /* Set motor direction */
    inline void MotorDir(unsigned char left_dir, unsigned char right_dir)
    {
    	switch(left_dir)
    	{
           	case FWD:
           	{
     			PORTC |= (LEFT_DIR) ;
    		}
    		break;
    		case RWD :
           	{
     			PORTC &=~ (LEFT_DIR) ;
    		}
    		break;
    		default:
    		{ 
    			OCR1A = 0;
     		}break;			
    	}
    	
    	switch(right_dir)
    	{
           	case FWD:
           	{
     			PORTC |= (RIGHT_DIR) ;
    		}
    		break;
    		case RWD :
           	{
     			PORTC &=~ (RIGHT_DIR) ;
    		}
    		break;
    		default:
    		{ 
    			OCR1B = 0;
     		}break;			
    
    	}
    
    }
    /* StatusLED(GREEN); */
    inline void StatusLED(unsigned char color)
    {
    	if (color == OFF)    {GREEN_LED_OFF; RED_LED_OFF;}
    	if (color == GREEN)  {GREEN_LED_ON; RED_LED_OFF;} 
    	if (color == YELLOW) {GREEN_LED_ON; RED_LED_ON;}
    	if (color == RED)    {GREEN_LED_OFF; RED_LED_ON;}
    }
    void BackLED(unsigned char left, unsigned char right)
    {
    };
    
    /* uses 36kHz timer => Sleep(x) = x/36kHz [sec] */
    void Sleep(unsigned char time36kHz)
    {   
    	unsigned char ziel=(time36kHz+count36kHz) & 0x00FF;
    	while (count36kHz != ziel);
    }
    
    void Msleep(int dauer)
    {
    	int z;
    	for(z=0;z<dauer;z++) Sleep(36);
    }
    
    void Init (void)
    {
    	//-------- seriell interface programmed in boot routine and already running -------
    	//  prepare 36kHz for IR - Communication
    	//TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
    	TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << CS20);
    
    	OCR2  = 0x91; // duty cycle for 36kHz
    	TIMSK |= (1 << TOIE2); // 36kHz counter for sleep
    		
    	// I/O Ports
    	DDRC = GREEN_LED | RED_LED; 
    
    	// Motor Bits
    	DDRC |= (1<<PC2) | (1<<PC3);
    	DDRD=0;
    	DDRD |= PWM;
    	
    	DDRB=0b01011000;
    	PORTB=0b00000000;
    
    	// for PWM (8-Bit PWM) on OC1A & OC1B
    	TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
    	// tmr1 running on MCU clock/8 
    	TCCR1B = (1 << CS11);
    	
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(0,0);
    	
    	sei();
    }
    //*********** ASURO Library modified for RP6 *****************************
    //
    // asuro.h
    //
    //************************************************************************
    #ifndef ASURO_H
    #define ASURO_H
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <stdlib.h>
    
    #define  FALSE	0
    #define  TRUE	1
    
    #define  OFF    0
    #define  ON     1
    
    #define GREEN	1
    #define RED	2
    #define YELLOW  3
    
    /* neue Funktionen und Variablen*/
    #define LEFT    0
    #define RIGHT   1
    
    void Msleep(int dauer);
    inline void StatusLED(unsigned char color);
    void Sleep(unsigned char time36kHz);
    inline void MotorDir(unsigned char left_dir, unsigned char right_dir);
    inline void MotorSpeed(unsigned char left_speed, unsigned char right_speed);
    void BackLED(unsigned char left, unsigned char right);
    
    // RP6 definitions
    #define GREEN_LED   (1 << PC4)          	/*!< PB0 Port fuer Gruene Status LED */
    #define RED_LED     (1 << PC5)			/*!< PD2 Port fuer Rote Status LED */
    #define PWM 	  (1 << PD4) | (1 << PD5)	/*!< PB1, PB2 Ports fuer Pulsweitenmodulation der Motor Geschwindigkeit */
    #define RIGHT_DIR (1 << PC3)	/*!Ports fuer Drehrichtung rechter Motor */
    #define LEFT_DIR  (1 << PC2)  /*!Ports fuer Drehrichtung linker Motor */
    #define BREAK	0x00				/*!< Motor bremsen */
    #define FREE	0x00  	/*!< Motor freilaufend ==> gibts nicht beim RP6 */
    
    // ASURO Ports, not uset in RP6
    #define FWD	(1 << PB5) 			/*!< Motor vorwaerts */
    #define RWD	(1 << PB4) 			/*!< Motor rueckwaerts */
    
    #define GREEN_LED_ON  PORTC |=  GREEN_LED	/*!< Gruene Status LED an */
    #define GREEN_LED_OFF PORTC &= ~GREEN_LED	/*!< Gruene Status LED aus */
    #define RED_LED_ON    PORTC |=  RED_LED		/*!< Rote Status LED an */
    #define RED_LED_OFF   PORTC &= ~RED_LED		/*!< Rote Status LED aus */
    
    #endif /* ASURO_H */
    
    //*********** ASURO Library modified for RP6 *****************************
    //
    // test.c
    //
    //************************************************************************
    #include "asuro.h"
    
    int main(void)
    {
      	Init();
    //	Encoder_Init();
    
    		StatusLED(GREEN);
    		Msleep(500);
    		StatusLED(RED);
    		Msleep(500);
    		StatusLED(GREEN);
    		Msleep(500);
    		StatusLED(RED);
    		
    		Msleep(2000);
    
    		MotorDir(FWD,FWD);
    		MotorSpeed(100,100);
    		Msleep(2000);
    		MotorDir(RWD,RWD);
    		Msleep(2000);
    		
    		MotorSpeed(0,0);
    
    
    
    	while(1);
    }
    
    
    Copyrights:
    
    /*!
     * \file asuro.c
     * \brief Die ASURO Bibliothek
     *
     * $Revision: 2.60 $
     * $Date: 27. September 2005 $
     * $Author: Jan Grewe, Robotrixer, Waste, Stochri, Andun, m.a.r.v.i.n $
     *
     */
    
    /*******************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   ASURO
    *
    * Description: This file contains ASURO main features
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * 1.00	   14.08.2003   Jan Grewe        build
    * 2.00     14.10.2003   Jan Grewe        LEFT_VEL, RIGHT_VEL -> MotorSpeed(unsigned char left_speed, unsigned char right_speed);
    *                                        LeftRwd(),LeftFwd(),RightRwd(),
    *                                        RigthFwd() -> MotorDir(unsigned char left_dir, unsigned char right_dir);
    *                                        GREEN_ON,GREEN_OFF,RED_ON,RED_OFF -> StatusLED(unsigned char color);
    *                                        LED_RED_ON, LED_RED_OFF -> FrontLED(unsigned char color);
    *                                        Blink(unsigned char left, unsigned char right) -> BackLED(unsigned char left, unsigned char right);
    *                                        Alles in Funktionen gefasst => leichter verst�dlich ?!?!
    * 2.10     17.10.2003   Jan Grewe        new Timer funktion void Sleep(unsigned char time36kHz)  
    *
    * Copyright (c) 2003 DLR Robotics & Mechatronics
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library "Robotrixer Buxtehude"
    *
    * Description: This file contains additional functions:
    *
    * signal (SIG_ADC)                 interrupt/signal routine for encoder-counter
    * signal (SIG_INTERRUPT1)          signal for switches
    * Encoder_Init()                   initializing encoder-counter
    * Encoder_Start()                  start autoencoding
    * Encoder_Stop()                   stop autoencoding
    * Encoder_Set(int,int)             set encodervalue
    * Msleep(int delay)                wait for delay in milliseconds
    * Gettime()                        get systemtime in milliseconds
    * PrintInt(int)
    *
    * modifications in Sleep, SIG_OUTPUT_COMPARE2, PollSwitch, LineData
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * beta1	   31.03.2005   Robotrixer	 asuro library
    * -------  ----------   --------------   ------------------------------
    * the encoder source is based on RechteckDemo.c ver 2.0 by Jan Grewe 22.10.2003 
    * Copyright (c) 2003 DLR Robotics & Mechatronics
    
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library modified for IR collision detector
    *
    * Description: modifications made in following functions:
    *
    * SIGNAL (SIG_OUTPUT_COMPARE2)	->	SIGNAL (SIG_OVERFLOW2)
    * Gettime()				counts now 36kHz
    * Init()				timer2 modified for adjustable duty cycle
    * Batterie()				bug fixed
    * Sleep()				counts now 36kHz
    * Msleep()				counts now 36kHz
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * beta2	   11.06.2005   Waste   	 asuro library
    * -------  ----------   --------------   ------------------------------
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library 
    *
    * Description: This file contains additional functions:
    *
    * motor control functions 29.7.2005 stochri
    * void Go(int distance)
    * void Turn(int degree)
    *
    * unsigned char Wheelspeed[2]		measured Wheelspeed by interupt
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------------------
    * sto1     29.07.2005   stochri		 asuro library with motor control functions
    * -------  ----------   --------------   ------------------------------------------
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library 
    *
    * Description: modifications made in following functions:
    *
    * void Go(int distance, int speed)
    * void Turn(int degree, int speed)
    *
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------------------
    * And1     31.07.2005   Andun		 Added Speed and Odometrie
    * -------  ----------   --------------   ------------------------------------------
    *****************************************************************************/
    /****************************************************************************
    *
    * File Name:   asuro.c
    * Project  :   asuro library 
    *
    * Description: modifications made in following functions:
    *
    * void PrintInt(int wert)
    *
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------------------
    * 2.60     28.09.2005   m.a.r.v.i.n      doxygen comments 
    * -------  ----------   --------------   ------------------------------------------
    *****************************************************************************/
    /***************************************************************************
    *                                                                         *
    *   This program is free software; you can redistribute it and/or modify  *
    *   it under the terms of the GNU General Public License as published by  *
    *   the Free Software Foundation; either version 2 of the License, or     *
    *   any later version.                                                    *
    ***************************************************************************/
    Bester Gruß,
    stochri

    Edit:
    V0.1: Msleep und StatusLED erstellt
    V0.2: MotorSpeed und MotorDir eingefügt

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Hallo stochri,

    Der RP6 Bootloader kümmert sich zwar auch schon um die grundlegenden Sachen wie Portrichtung etc., aber nicht um die genauen Einstellungen.
    Das muss noch mit ins Programm rein - sonst wird einiges nicht wirklich funktionieren. Die Hardware ist beim RP6 komplett anders als beim ASURO.

    Die ganzen Timer/PWM Einstellungen kannst Du daher natürlich nicht vom ASURO übernehmen!
    Da solltest Du Dir mal die Init Routine von der RP6Library anschauen!

    MfG,
    SlyD

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo stochri,
    toller Ansatz, die LIB vom Asuro zu nutzen.
    Da ich keinen RP[5|6] habe, kann ich also auch nicht wissen, was da an Software / Lib á la asuro.c mitgeliefert wird. (Deshalb bitte ich jetzt schon mal um Nachsicht)

    Ich habe mir mal deinen oben angegeben Code angesehen. Dabei ist mir aufgefallen, dass du FWD und RWD im asuro.h-Teil definierst, aber als Kommentar angibst, dass es nicht benutzt wird.
    Im asuro.c-Teil benutzt du diese Defines in der Funktion MotorSpeed() als Vergleichswerte für die übergebenen Parameter (left_dir und right_dir).
    Somit kann man diese Funktion ja nun mit den im Asuro bekannten Parametern aufrufen. Klasse.
    In der Funktion setzt du dann FWD und RWD auf LEFT_DIR bzw. RIGHT_DIR um. Kommen diese Defines vom RP6? Könnte man hier nicht beide Define-Pärchen FWD / RWD und LEFT_DIR / RIGHT_DIR 'irgendwie' gleich definieren?
    Da komme ich drauf, weil ich es für 'gefährlich' halte FWD und RWD auf Port-Pins zu definieren. Ich habe ja keine Ahnung, was beim RP6 an Hardware dahinter liegt.
    Lieber Asuro programieren als arbeiten gehen.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    Hallo Sternthaler,
    In der Funktion setzt du dann FWD und RWD auf LEFT_DIR bzw. RIGHT_DIR um. Kommen diese Defines vom RP6? Könnte man hier nicht beide Define-Pärchen FWD / RWD und LEFT_DIR / RIGHT_DIR 'irgendwie' gleich definieren?
    weil ich schnell sein wollte, habe ich manchmal ein wenig geschludert. Es sind wirklich Teile der ASURO-Defines und der RP6-Defines gemischt. Was die ASURO-defines anbelangt, ist deren Verwendung natürlich notwendig, damit die Lib kompatibel wird.
    Da komme ich drauf, weil ich es für 'gefährlich' halte FWD und RWD auf Port-Pins zu definieren. Ich habe ja keine Ahnung, was beim RP6 an Hardware dahinter liegt.
    Das kann man vielleicht aus diesem Thread ganz gut ersehen, hier ist die Portbelegung des Atmega32 und deren Verwendung auf dem RP6 beschrieben.

    Ich habe mir schon überlegt, ob es nicht ganz lustig wäre, in die ASURO-Bibliothek einfach einen Compiler-Switch der Form #define RP6 oder #define ASURO einzubauen, damit man die Bibliothek gleich für beide verwenden kann. Der Aufwand dazu wäre eventuell überschaubar.

    Die RP6-Bibliothek ist zwar etwas komfortabler als die ASURO-Bibliothek, dafür ist die ASURO Bibliothek aber einfacher zu durchschauen.

    Gruß,
    stochri

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo stochri,
    danke für die prompte Antwort.
    So ein Define in der Asuro-LIB hätte schon etwas. Evl. kannst du ja mal den Header zur RP6-Lib posten, damit man mal sehen kann was da auf den 'Kleinen' zukommen würde.

    Mit den Port's zum Asuro-FWD und -RWD wäre ich etwas vorsichtig. Da sind laut deinem Link mit PB5 und PB6 die EEPROM-Anschlüsse SI und SO angesprochen (Controller-Professor) bzw. im Base-Professor "Start/Stop-Taster" und "ACS Sendediode links"
    Welcher davon wird denn mit der Asuro-LIB gefüttert? radbruch hatte in deinem RP6-Musik-Thread angegeben, dass Asuro und RP6 den gleichen Takt bekommen. Dann kann es sich ja eigendlich nur um den Base-Prozessor handeln.
    Lieber Asuro programieren als arbeiten gehen.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    Mit den Port's zum Asuro-FWD und -RWD wäre ich etwas vorsichtig. Da sind laut deinem Link mit PB5 und PB6 die EEPROM-Anschlüsse SI und SO angesproche
    Nach einigem Nachdenken ist mir klar geworden, was Du meinst.
    Der Sachverhalt ist, dass die Portdefinition zwar rein "schriftlich" in den defines verwendet werden, also

    #define FWD (1 << PB5) /*!< Motor vorwaerts */

    aber dieser Portpin im Programm nie angesprochen wird, da ich die Definition aus Kompatibilitätsgründen etwas "misbräuchlich" verwende.

    PB5 ist nämlich nichts anderes als eine Zahl, nämlich "5" und mit der defintion ersetzt ich FWD einfach durch die Zahl "1<<5" also 0x20. Das erspart mir, für FWD irgendeine andere Zahl zu "erfinden".

    Also Resume: PB5 steht zwar da, wird aber nicht angesprochen.

    Gruß,
    stochri

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo stochri,
    jetzt ist mir auch klar, warum es tatsächlich egal ist wie FWD und RWD eigendlich definiert sind. Die beiden Defines werden ja in der Asuro-LIB und auch bei dir sonst nirgendwo benötigt.
    Also reichen alle 4 Asuro-Defines (FWD, RWD, BREAK und FREE) um sie als Parameter so zu nutzen, wie Asurianer es kennen. \/
    (BREAK/FREE ist bekannt)
    Lieber Asuro programieren als arbeiten gehen.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    Also reichen alle 4 Asuro-Defines (FWD, RWD, BREAK und FREE) um sie als Parameter so zu nutzen, wie Asurianer es kennen. Dancing
    So ist es!
    Was die Anschlußbelegung des Atmega32 angeht, hast Du wahrscheinlich die falsche erwischt, in dem Link werden verschiedene Anschlußbelegungen aufgeführt. Die Hauptplatine des RP6 wird als "Base" bezeichnet.

    stochri

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo stochri,
    ja, die "Base" hatte ich oben ja schon als Favoriten im Auge.
    Wie schaut es aus mit einem Post der RP6-LIB-Header-Datei? Dann könnte ich ja noch einen 'Blick riskieren' um ein #ifdef ASURO_ODER_RP6 zu beantragen bei m.a.r.v.i.n
    Lieber Asuro programieren als arbeiten gehen.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    Die Sourcen des RP6 befinden sich hier:
    http://www.arexx.com/rp6/downloads/R...s_20070731.zip
    Die Diskussion dazu hier.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen