- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: Programmierproblem

  1. #11
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    Anzeige

    E-Bike
    leite mal die ISR so ein:

    SIGNAL (USART_RXC){
    ...
    }
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    25.02.2007
    Beiträge
    44
    nein das ist es leider nicht! SIGNAL ist veraltet, neu schreibt man ISR und den Interrupt vektor USART_RXC gibt es nicht, der heisst USART_RXC_vect!

  3. #13
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    naja lieber veraltet als nicht funktionierend...

    im datenblatt steht USART_RXC als name. probiere es doch, wenns nciht geht kannste immer noch weiter suchen...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    25.02.2007
    Beiträge
    44
    habs probiert geht nicht!
    warning: 'USART_RXC' appears to be a misspelled signal handler

  5. #15
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    mmh... dann weiss ich spontan auch nich weiter...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    ich weiss nicht wo ich mein "problem" unterbringen soll - also unter "programmierproblem" ist ja wohl richtig
    Der asuro soll schauen, ob vor ihm platz ist (ultraschall), eine strecke fahren, 90grad abbiegen und erstmal stehen bleiben. Ich komme einfach nicht dahinter warum er die abfrage nach der entfernung (if(abstand > 25)) überspringt und nicht geradeuasfährt, sondern gleich zum darauf folgendem else und turn geht...
    Die US-hardware funktioniert, mit der gleichen abfrage wird in etwa die entfernung angezeigt, die auch vor den Sensoren zur verfügung steht...
    Code:
    #include "asuro.h"
    #include "inka.h"
    int dist;
    int abstand=0;
    int i=0;
    int j=0;
    
    
    void umschauen (void)
    	{
    	Turn (20, 200);
    	StatusLED(GREEN);
    	Msleep(100);
    	Turn (-40, 200);
    	StatusLED(YELLOW);
    	Msleep(100);
    	Turn (20, 200);
    	StatusLED(RED);
    	Msleep(100);
    	}
    void fahren (void)
    {
    	Go (200,150);
    	Msleep(1000);
    	Turn (85, 150);
    	Msleep(1000);
    }
    
    void entfernung(void)
    {
      Init();
      SerWrite("\r\n  --- ultrasonic test ---",29);
      Msleep(1000);
    
      do
      {
        abstand=Chirp();
        SerWrite("\r\n distanz in cm   ",16);
        Msleep(500);
        PrintInt(abstand);
    
    if(abstand > 25) {
    	StatusLED(GREEN);
    	Msleep(500);
    	fahren();
    	//MotorDir(FWD, FWD);
    	//MotorSpeed(200, 200);
    			}
    else {
    	StatusLED(RED);
    	Msleep(500);
    	Turn(180,200);
    	}
      }
      while(1);
      return 0;
    }
    
    
    int main(void)
    {
      Init(); 
      WaitforStart();
    
    EncoderInit ();
    for (j = 0; j < 8; j++)  
    { 
     entfernung();
     StatusLED(YELLOW);
     Msleep(500);
      }
    
    //main();
    while(1);
    return 0;
    }
    Könnt ihr mir bitte einen tipp geben?
    gruß inka

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    699
    Was soll eigentlich das Init() in entfernung()? Schreib dann auf jeden Fall nochmal EncoderInit() dahinter. Was steht in inka.h?

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    17.06.2007
    Ort
    Geretsried
    Alter
    34
    Beiträge
    43
    was soll denn die endlosschleife am ende von entfernung()?
    was bringt umschaun wenn dus eh nicht benutzt?

    ich würd einfachmal en kurzes programm schreiben, dass die ultraschall-entfernung (wenn sie sich ändert) per IR ausgibt
    und dann mit der hand enfernungen simulieren

    und dann prüfen ob die 25 abstand passen, weil ich sonst nix entdecken kann (wass nix heißen muss )

    gruß tobi
    Gruß datobbs

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.04.2007
    Ort
    Einhausen
    Alter
    68
    Beiträge
    699
    @inka: Wenn Du mir die Datei inka.h zeigst, kann ich es gerne testen und den Fehler finden, falls er im Programm verborgen ist.

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hi,
    erstmal danke für die antworten...
    @tobi
    was soll denn die endlosschleife am ende von entfernung()?
    meinst du while(1) - ist es nicht ein notwendiges teil von "do" weiter oben?

    was bringt umschaun wenn dus eh nicht benutzt?
    jetzt nichts, eigentlich ist es ja auch später zunächstmal nur ein net aussehneder gag...
    und dann prüfen ob die 25 abstand passen
    habe ich mit einem eigenständigem programm, dass so aussah wie "entfernung" - incl. ausgaben im terminal, und wie bereits geschrieben, getestet - die entfernung, wenn ich vor die Sensoren blatt papier halte (bei der hand funktioniert es nicht so gut, weiss nicht warum), auch angezeigt. Allerdings oft mit ausreissern, die nicht zu der tatsächlichen entfernung passen...
    @ehenkes - danke für´s angebot zum testen...
    inka.h:
    Code:
    #ifndef INKA_H_
    #define INKA_H_
    
    #endif /*INKA_H_*/
    
    
    /*********************warten auf start****************************/
    void WaitforStart(void); // blink until any switch is pressed,
                          // then wait until switch is released
    
    /********************ultrasonic***********************************/
    void InitUltrasonics(void);
    void RestoreAsuro(void);
    int Chirp(void);
    inka.c:
    Code:
    #include "asuro.h"
    #include "inka.h"
    /**************************warten auf start*************************/
    void WaitforStart(void)    // blink until any switch is pressed,
    {                       // then wait until switch is released
      unsigned int t1, t2;
      unsigned int col=OFF;
    
      while (1)             // blinking StatusLED until any switch is pressed
      {
        t1 = PollSwitch();
        t2 = PollSwitch();
        if (t1==t2)
        {
          if (t1)
          {
            break;
          }
          else
          {
            col ^= GREEN;
            StatusLED(col);
          }
        }
        Msleep(50);
      }
    
      StatusLED(OFF);       // turn off StatusLED and ...
      BackLED(ON,ON);       // ... turn on both BackLED's
    
      while (1)             // wait until switch is released
      {
        t1 = PollSwitch();
        t2 = PollSwitch();
        if (t1==t2)
        {
          if (!t1)
          {
            break;
          }
        }
        Msleep(50);
      }
    
      BackLED(OFF,OFF);     // turn off BackLED's indication start of race
    }
    /*****************ultrasonic********************************/
    /**
     * being used insted TIMER2_OVF_vect during ultrasonic polling
     */
    ISR(TIMER2_COMP_vect)
    {
    	//TCNT2 += 0x25;
    	count36kHz++;
    	if(!count36kHz) timebase++;
    }
    
    /**
     * initialises the Ultrasonic module
     * this function is automaticly called by Chirp
     */
    void InitUltrasonics(void)
    {
    	// Change Oscillator-frequency of Timer 2
    	// to 40kHz, no toggling of IO-pin:
    	TCCR2  = (1 << WGM21) | (1 << CS20);
    	OCR2   = 100;              // 40kHz @8MHz crystal
    	TIMSK |= (1 << OCIE2);     // OCIE2:  Timer/Counter2 Output Compare Match Interrupt Enable
    	
    	ADCSRA = (0 << ADEN);      // deactivate ADC
    	ACSR  |= (1 << ACIS1);     // Comparator Interrupt on Falling Output Edge
    
    	ADMUX  = 0x03;             // connect ADC3-input with comparator
    	SFIOR |= (1 << ACME);      // connect ADC multiplexer to comparator
    	DDRD  &= ~(1 << 6);        // use Port D Pin 6 as input (AIN0)
    }
    
    /**
     * restores the hardware after using the Ultrasonic module
     * this function is called automaticly after a Chirp
     */
    void RestoreAsuro(void)
    {
    	TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
    	OCR2  = 0x91;              // duty cycle for 36kHz
    	TIMSK |= (0 << OCIE2);     // OCIE2:  Timer/Counter2 Output Compare Match Interrupt Enable
    
    	ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // clk/64
    	ACSR  |= (0 << ACIS1);
    
    	if(autoencode) {
    		EncoderInit();
    	}
    	
    	Sleep(1);
    }
    
    /**
     * @return distance in cm
     */
    int Chirp(void)
    {
    	unsigned int sleeptime = 0, dist = 0;
    
    	InitUltrasonics();
    
    	// chripen:
    	count36kHz = 0;
    
    	while(count36kHz != 20) {
    		OCR2 = 100 + 20 / 2 - count36kHz;
    	}
    
    	TCCR2	= (1 << WGM21) | (1 << CS20);
    	OCR2	= 100;
    
    	// analyse echoes:
    	while(TRUE) {
    		Sleep(1);
    		sleeptime++;
    
    		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;
    		}
    	}
    	
    	RestoreAsuro();
    	return dist;
    }
    Was soll eigentlich das Init() in entfernung()?
    gut, dass mit dem init werde ich rausnehmen und noch einmal testen...
    gruß inka

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests