- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 38 von 38

Thema: ACS an NIBObee

  1. #31
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.02.2011
    Alter
    28
    Beiträge
    104
    Anzeige

    Praxistest und DIY Projekte
    "Zugriff auf C:/Program Files (x86)/NIBObeeLib/src/nibobee/motpwm.c wurde verweigert." zum Beispiel

  2. #32
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Sollten sich die Dateien der Library nicht im AVR-Pfad befinden?

    C:\WinAVR\avr\include\nibobee
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #33
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.02.2011
    Alter
    28
    Beiträge
    104
    So, es klappt jetzt, nachdem ich den include-Ordner rüberkopiert habe. Allerdings funktioniert mein Programm immer noch nicht, wie es funktionieren sollte, könntest du noch einmal drübersehen?:
    Code:
    #define ddr_acs_led_l  	DDRA 	// Anoden der IR-LEDs links
    #define port_acs_led_l 	PORTA
    #define pin_acs_led_l	(1<<PA1)
    
    #define ddr_acs_led_r  	DDRA    // rechts
    #define port_acs_led_r 	PORTA
    #define pin_acs_led_r 	(1<<PA0)
    
    #define ddr_acs_36kHz  	DDRA 	// Kathoden der IR-LEDS mit 36kHz getaktet
    #define port_acs_36kHz 	PORTA
    #define pin_acs_36kHz 	(1<<PA3)
    
    #define ddr_acs_tsop  	DDRA 	// Eingang IR-Empfänger
    #define port_acs_tsop 	PINA  // Achtung, das ist ein Eingang!
    #define pin_acs_tsop  	(1<<PA2)
    
    #include <nibobee/iodefs.h>
    #include <nibobee/led.h>
    #include <nibobee/motpwm.h>
    #include <nibobee/sens.h>
    #include <nibobee/base.h>
    
    volatile uint8_t count36kHz;
    volatile uint8_t acs=0;
    
    void Sleep(uint8_t pause);
    void Msleep(uint16_t pause);
    void ACSData(uint16_t *data);
    
    int main(void)
    {
        uint16_t data[2]; // Speicher für ACS-Werte
    	
        led_init();
    	motpwm_init();
    	sens_init();
    	while(1==1) {
    	
        // Setup Timer2
        TCCR2 = (1 << WGM20)|(1 << CS20); // PhaseCorrect-PWM, no prescaling, no OC2-Pin!
        TCNT2  = 96; // (512-416) 36kHz @15MHz
        OCR2 = 151; // (255-(208/2)) 151 ist 50:50 Compare Match für symetrische Halbwellen
        TIMSK |= (1 << OCIE2)|(1 << TOIE2); // Comp und OVF-ISR enable, Overflow bei Bottum!
        
    	enable_interrupts();
    	int16_t speed_l=0;
    	int16_t speed_r=0;
    	motpwm_setLeft(speed_l);
    	motpwm_setRight(speed_r);
    
        ddr_acs_led_l |= pin_acs_led_l;        // die Anoden der IR-LEDs
        port_acs_led_l &= ~pin_acs_led_l;
    
        ddr_acs_led_r |= pin_acs_led_r;
        port_acs_led_r &= ~pin_acs_led_r;
    
        ddr_acs_36kHz |= pin_acs_36kHz;        // die Kathoden der IR-LEDs
    
          led_set(0,1);
        Msleep(2000); // wait4programmer
          led_set(0,0);
    
        while(1)
      	  ACSData(data);
          PORTB &= ~15; // alle Leds aus
          if(data[0] > 251) speed_l = 500;
             else if(data[0] > 230) speed_l = 800;
          if(data[1] > 251) speed_r = 500;
             else if(data[1] > 230) speed_r = 800;
          Msleep(100);
    
    	 
       }
       return(0);
    }
     ISR (TIMER2_COMP_vect)
    {
        port_acs_36kHz ^= pin_acs_36kHz; // IR-LEDs togglen
    }
    // Frequenzkorrektur für 36kHz (512-416 plus 3 Takte fürs Laden von TCNT2?)
     ISR (TIMER2_OVF_vect)
    {
        TCNT2  += 99; // += bewirkt, dass schon erfolgte Zähltakte nicht ignoriert werden!
        port_acs_36kHz &= ~pin_acs_36kHz; // bei Nulldurchgang soll die IR-LED aus sein!
        //port_acs_36kHz |= pin_acs_36kHz; // seltamerweise funktioniert das auch?
        if(count36kHz) count36kHz--;
       if(acs) acs--;
    }
    
    void Sleep(uint8_t pause) // 1/36000 Pause blockierend
    {
        count36kHz=pause;
        while(count36kHz);
    }
    void Msleep(uint16_t pause) // 1/1000 Pause blockierend
    {
        while(pause--) Sleep(36);
    }
    void ACSData(uint16_t *data)
    {
       OCR2=253;
       port_acs_led_l |= pin_acs_led_l; // ACS LED left on
       while((port_acs_tsop & pin_acs_tsop) && (OCR2 > 151))
       {
          acs=10; // Impulse senden, acs wird in OVF-ISR runtergezählt
          while(acs);
          OCR2--;
       }
       port_acs_led_l &= ~pin_acs_led_l; // ACS LED left off
       data[0]=OCR2;
       while(!(port_acs_tsop & pin_acs_tsop)); // warten bis keine Echo mehr
    
       OCR2=253;
       port_acs_led_r |= pin_acs_led_r; // ACS LED right on
       while((port_acs_tsop & pin_acs_tsop) && (OCR2 > 151))
       {
          acs=10;
          while(acs);
          OCR2--;
       }
       port_acs_led_r &= ~pin_acs_led_r; // ACS LED right off
       data[1]=OCR2;
       while(!(port_acs_tsop & pin_acs_tsop));
    }

  4. #34
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Code:
        while(1)
      	  ACSData(data);
          PORTB &= ~15; // alle Leds aus
          if(data[0] > 251) speed_l = 500;
             else if(data[0] > 230) speed_l = 800;
          if(data[1] > 251) speed_r = 500;
             else if(data[1] > 230) speed_r = 800;
          Msleep(100);
       }
    Wo werden die speed_x-Werte an die Antriebe übergeben?

    Hier stimmt es auch noch nicht:

    while(1==1) {

    und

    while(1)
    ACSData(data);

    Lese endlos die ACS-Daten ein...
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #35
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.02.2011
    Alter
    28
    Beiträge
    104
    Ok, die beiden unteren Fehler habe ich gefunden, aber das mit den speed_x-Werte an die Antriebe übergeben, versteh ich nicht...

  6. #36
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    In der Hauptschleife fehlt etwas in der Art:

    motpwm_setLeft(speed_l);
    motpwm_setRight(speed_r);
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #37
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.02.2011
    Alter
    28
    Beiträge
    104
    vielen Dank, jetzt klappt alles wunderbar!

  8. #38
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Prima, Glückwunsch. Großes Lob für dein Durchhaltevermögen ;)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 4 von 4 ErsteErste ... 234

Ähnliche Themen

  1. NiboBee und Windows 7
    Von m125 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 3
    Letzter Beitrag: 12.02.2015, 11:21
  2. nibobee IR-Abstandsmessung
    Von pinsel120866 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 39
    Letzter Beitrag: 10.10.2011, 10:19
  3. Nibobee: Rad-Getriebe
    Von c07 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 16
    Letzter Beitrag: 21.01.2011, 15:57
  4. Nibobee laden
    Von Blacky666 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 3
    Letzter Beitrag: 07.12.2010, 12:08
  5. USB-Programmierer vom Nibobee
    Von Silver-Drago im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 06.11.2010, 01:39

Berechtigungen

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

12V Akku bauen