- LiFePO4 Speicher Test         
Seite 7 von 16 ErsteErste ... 56789 ... LetzteLetzte
Ergebnis 61 bis 70 von 151

Thema: ASURO - US-Erweiterungsplatine

  1. #61
    Neuer Benutzer
    Registriert seit
    15.12.2005
    Ort
    Worms
    Alter
    55
    Beiträge
    4
    Anzeige

    LiFePo4 Akku selber bauen - Video
    OK , hier ist der Code :

    Code:
    #include "asuro.h"
    
    
    void InitUlrasonics(void)
    {
    	// Change Oscillator-frequency of Timer 2
    	// to 40kHz, no toggling of IO-pin:
    	TCCR2 	= (1 << WGM21) | (1 << CS20);
    	OCR2 		= 100;					// 40kHz @8MHz crystal
    	
    	ADCSRA 	= (0 << ADEN);	// ADC deaktivieren
    	
    	// Analog Comparator einstellen:
    	ACSR 	= (1 << ACIS1);		// Comparator Interrupt on Falling Output Edge
    	ADMUX	= 0x03;						// ADC3-Eingang mit Komparator verbinden
    	SFIOR	|= (1 << ACME);		// ADC Multiplexer mit Komparator verbinden
    	DDRD 	&= ~(1 << 6);			// Port D Pin 6 als Eingang schalten (AIN0)
    }
    
    
    
    int Chirp(unsigned char flag)
    {
    	// Variablen definieren
    	unsigned int sleeptime = 0, dist = 0;
    	
    	
    	if(flag)
    		InitUlrasonics();
    	
    	// Chripen:
    	count72kHz = 0;
    	
    	while(count72kHz != 20) {
    		OCR2 = 100 + 20 / 2 - count72kHz;
    	}
    	
    	TCCR2	= (1 << WGM21) | (1 << CS20);
    	OCR2	= 100;
    	
    	
    	// Echos auswerten:
    	for(;;) {
    		Sleep(1);
    		sleeptime += 1;
    		if((ACSR & (1 << ACI))) {
    			dist = (unsigned int) ((long) ((344L * ((sleeptime * 1000L) / 72L) / 10000L) / 2L));
    			ACSR |= (1 << ACI);
    			break;
    		}
    		
    		ACSR |= (1 << ACI);
    		
    		if(sleeptime > 3500) {
    			return -1;
    		}
    	}
    	
    	//if(flag)
    		//ReinitAsuro();
    	
    	return dist;
    }
    
    
    int main(void)
    {
    	// Variablen
    	int chirpData = 0;
    	int speed =200;
    	
    	// Asuro initialisieren
    	Init();
    	
    	
    	for(;;) {
    		chirpData = Chirp(TRUE);
    		
    		if(chirpData>21){
    			MotorDir(FWD,FWD);
    			
    			MotorSpeed(speed,speed);
    			}
    			else
    			{
    			MotorDir(RWD,RWD);
    			MotorSpeed(100,speed);
    			}
    		
    	
    	}
    	
    	return 0;
    }
    Der Code der Ultrasonics.h von luma

    Code:
    /*******************************************************************************
    * Dateiname:	ultrasonics.h
    * Projekt:		Erweiterte Asurobibliothek
    * 
    * 
    * 
    * 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.
    * 
    * 
    * Kleine Funktionsbibliothek, mit welcher man die Ultraschall-
    * Erweiterungsplatine für Asuro betreiben kann.
    * 
    * 
    * @version 1.0.0
    * @since 13.08.2005
    * @author Luma
    *******************************************************************************/
    
    
    
    #ifndef ULTRASONICS_H
    #define ULTRASONICS_H
    
    #include "asuro.h"
    
    
    
    /**
     * Konfiguriert den Asuro so, das er die Ultraschall-Erweiterungsplatine in
     * Betrieb nehmen kann. Hinweis: Diese Funktion wird automatisch von der
     * Funktion Chirp aufgerufen und sollte sonst nicht verwendet werden.
     */
    void InitUlrasonics(void);
    
    
    /**
     * Diese Funktion wird aufgerufen, wenn man den Asuro wieder zurückstellen
     * will. (Das geschieht normalerweise nach einem "Chirp".). Auch diese
     * Funktion sollte sonst nicht verwendet werden.
     * 
     */
    void ReinitAsuro(void);
    
    
    /**
     * Sendet einen sogenannten "Chirp". Ist flag true (also = 1), so wird der
     * Asuro nach dem Chrip wieder zurückgestellt, damit man wieder wie gewohnt
     * alle Funktionen verwenden kann (während eines Chirps ist es z. Bsp. nicht
     * möglich über USART Daten zu schicken/empfangen, da der ADC deaktiviert werden
     * muss). Tritt irgendein Fehler auf, oder kann nicht gemessen werden, gibt
     * die Funktion -1 zurück.
     * 
     * @param	flag								Ist flag true wird der Asuro nach jedem Chirp
     *														wieder zurückgestellt und vor dem Chirpen,
     *														umkonfiguriert. Ist flag false so kann man
     *														mit den Funktionen InitUlrasonics sowie
     *														ReinitAsuro Asuro entweder zum Chirpen oder
     *														zum "Normalbetrieb" umkonfigurieren. flag auf
     *														true zu setzen wird empfohlen wenn man nur
     *														einzelne Messung macht.
     * @return										Gibt die gemessene Strecke in [cm] zurück
     */
    int Chirp(unsigned char flag);
    
    #endif
    Danke schonmal für die Hilfe

    Oliver

  2. #62
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    Hallo olima,
    unter http://sourceforge.net/project/showf...roup_id=155217
    findest Du die aktuellen ASURO-libs.

    Leider kann man es auch mit der aktuellen 2.6 nicht kompilieren, es gibt leider die Variable count72kHz nicht mehr öffentlich. Deshalb habe ich die lib etwas verändert und einfach die dort enthaltene Variable count36kHz global gemacht und einfach count72kHz durch count36kHz ersetzt. Möglicherweise stimmt die Frequenz jetzt um den Faktor 2 nicht, also falls es nicht geht, einfach alles Stellen an denen count36kHz vorkommt durch count36kHz/2 ersetzen. Dann könnte es theoretisch funtkionieren.
    Ich habe als Entwicklungsumgebung AVR-Studio verwendet, das compilierte Projekt findest Du im ZIP-File.

    Gruss,
    stochri
    Angehängte Dateien Angehängte Dateien

  3. #63
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    71
    Beiträge
    157
    Moin,

    noch eine Anmerkung zur Vermeidung von Fließkomma-Arithmetik. Statt mit einem Faktor 10 hoch x zu arbeiten, ist es besser 2 hoch x zu wählen. Die Multiplikation mit 10... ist noch recht einfach. Aber die Division ist eher aufwändig. Durch eine Zweierpotenz läßt sich hingegen durch einfaches Rechtsscheiben dividieren.

    Gruß Red Baron

  4. #64
    Neuer Benutzer
    Registriert seit
    15.12.2005
    Ort
    Worms
    Alter
    55
    Beiträge
    4
    vielen Dank @storchi für die klasse Unterstützung.

    Leider klappt es immer noch nicht so ganz.
    Anscheinend bleibt der AVR in der "InitUltrasonics" hängen.

    Welche Funktion hat die count36khz denn überhaupt, und weshalb wurde die geändert ???

    Sorry für die dummen Fragen.

    Oliver

  5. #65
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    Wenn es nicht klappt, liegt das vermutlich an Deiner Installation von Win-AVR. Entweder hast Du eine sehr alte Version oder es ist sonst irgendwas faul

    Gruss,
    stochri

  6. #66
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2006
    Beiträge
    14
    wer von euch weiß was das Erweiterungsset kostet mit dem kleinen LCD-Bildschirm

    Bitte eine PN schicken Danke
    apotecarius

  7. #67
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Oliver,

    ich habe das gleiche Problem wie du mit der Ultraschall Erweiterung und dem Programm von luma im Zusammenhang mit der aktuellen Asuro Bibliothek.
    Das Programm bleibt einfach hängen.

    Allerdings funktioniert das ganze mit dem Original Programm Beispiel und der Original Asuro Bibliothek ohne Probleme (Das Programm gibt es mit der Beschreibung von luma auf der Arexx-Homepage .

    Ich werde das ganze noch weiter untersuchen.

    @apotecarius: das LCD Modul ist noch nicht verfügbar.

    Gruß Peter

    Edit:
    Problem erkannt. Das US Modul kann so nicht mehr mit der neuen Asuro Bibliothek funktionieren. Mit Einführung der count36kHz Variablen wurde auch die IRQ Funktion von SIG_OUTPUT_COMPARE2 nach SIG_OVERFLOW2 geändert. Der Grund für die Umstellung war wohl der Umbau der IR Schnittstelle zur Kollisionserkennung.
    Fazit:
    Wer das US Modul benutzen will, muß mit der Original Asuro Bibliothek arbeiten!

  8. #68
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2006
    Beiträge
    8
    Zitat Zitat von m.a.r.v.i.n
    Edit:
    Problem erkannt. Das US Modul kann so nicht mehr mit der neuen Asuro Bibliothek funktionieren. Mit Einführung der count36kHz Variablen wurde auch die IRQ Funktion von SIG_OUTPUT_COMPARE2 nach SIG_OVERFLOW2 geändert. Der Grund für die Umstellung war wohl der Umbau der IR Schnittstelle zur Kollisionserkennung.
    Fazit:
    Wer das US Modul benutzen will, muß mit der Original Asuro Bibliothek arbeiten!
    is there really no way to use the 'Ultraschall' module with the newer library? i tried to figure out what has change but couldn't really find any reference to the SIG_OUTPUT_COMPARE2 to SIG_OVERFLOW2 change, could you give me a pointer where to look?

    thanks in advance

    regards,
    dopez

  9. #69
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hi dopez,

    maybe it can be done by an #ifdef #else construct and a preprocessor define.

    If the US Module is in use, the old code is included, else the new code.

    The old Asuro Lib:

    Code:
    /* uses timer2 (36kHz for IR communication */
    /* counts falling and rising edge => 36kHz*2 = 72kHz */
    SIGNAL (SIG_OUTPUT_COMPARE2)
    {
    	count72kHz ++;
    }
    
    /* Init function Processor will be initalized to work correctly */
    void Init (void)
    {
    	//-------- seriell interface programmed in boot routine and already running -------
    	//  prepare 36kHz for IR - Communication
    	TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
    	OCR2  = 0x6E; // 36kHz @8MHz
    	TIMSK |= (1 << OCIE2); // 36kHz counter for sleep
    The new Asuro Lib sources:

    Code:
    /* uses timer2 (36kHz for IR communication */
    SIGNAL (SIG_OVERFLOW2)
    {
    	TCNT2 += 0x25;
    	count36kHz ++;
    	if (!count36kHz) timebase ++;
    }
    
    /* Init function Processor will be initalized to work correctly */
    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);
    	OCR2  = 0x91; // duty cycle for 36kHz
    	TIMSK |= (1 << TOIE2); // 36kHz counter for sleep
    Best reagrds m.a.r.v.i.n

  10. #70
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2006
    Beiträge
    8
    Hi m.a.r.v.i.n

    thanks for the reply, i will take a look if with that init values and that interrupt setting/handler (i guess?) get the new asuro lib working with Ultraschall

    and else perhaps with a #ifdef #else construct

    (the problem is that im quite a newbie when it comes to AVR programming and C in general, i guess #ifdef #else would be easiest at first)

    greetings,
    dopez

Seite 7 von 16 ErsteErste ... 56789 ... LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress