- Labornetzteil AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: Infrarot-Schnittstelle ohne Bootloader [Gelöst]

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Anzeige

    Praxistest und DIY Projekte
    hallo raid_ox,

    Um die seriellen Schnitstelle zu benutzen sollte sowie gesagt einmalig die USART initialisiert werden mit die hier genannten 'void Init(void)' Funktion damit konnen die RS232 signalen erzeugt werden. Mit die Funktion wird auch ein 36KHz Signal generiert (Timer2) um als tragefrekenz zu arbeiten so wie beim Asuro der fall ist. Ohne tragefrekwenz geht die Signal ubertragung mit Infrarotes Licht nicht.

    Die Port PB3/MOSI/OC2 sollte noch als Ausgang geschaltet werden (DDRB) damit die Tragefrekwenz nach aussen komt.

    Die USART pin PD1/TXD wird bein senden von Daten (einschalten der Transmitter) automatisch als Ausgang geschaltet.

    Gruss

    Henk

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    184
    Vielen dank Arexx-Henk, ich werde heute es noch probieren.
    Gruß Raid

    Der ^^ Mann

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    184
    hmm, es funktioniert immer noch nicht... (-.-).

    Code:
    void Init(void)
    {
    	//-------- serial interface programmed in boot routine and already running -------
    	DDRB |= (1 << PB3);
    	//  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
    	
    	// prepare RS232 
    	UCSRA = 0x00;
    	UCSRB = 0x00;	
    	UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
    	UBRRL = 0xCF; // 2400bps @ 8.00MHz
    	
    	// I/O Ports
    	DDRB = IRTX | LEFT_DIR | PWM | GREEN_LED; 
    	DDRD = RIGHT_DIR | FRONT_LED | ODOMETRY_LED | RED_LED;
    	
    	// for PWM (8-Bit PWM) on OC1A & OC1B
    	TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
    	// tmr1 running on MCU clock/8 
    	TCCR1B = (1 << CS11);
    	
    	// A/D Conversion
    	ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // clk/64 
    	ODOMETRY_LED_OFF;
    
    	FrontLED(OFF);
    	BackLED(ON,ON);
    	BackLED(OFF,OFF);
    	StatusLED(GREEN);
    	
    	MotorState(FWD,FWD);
    	MotorSpeed(0, 0);
    	sei();
    }
    ich habe DDRB |= (1 << PB3); hinzugefügt

    was heißt eigentlich "serial interface programmed in boot routine and already running" ???
    Gruß Raid

    Der ^^ Mann

  4. #14
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.068
    also übersetzen würde ich es mit "serielle routine wurde bereits im bootloadre gestartet und läuft bereits" oder so...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    184
    hmm, ich will gerne wissen was die "serielle routine" sind ...
    Gruß Raid

    Der ^^ Mann

  6. #16
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.068
    naja im bootloader wird die infrarotverbindung ja schon benutzt, um zu erkennen ob der computer daten sendet und um diese dann evtl zu empfangen. vielleicht läuft sie dann einfach weiter, und wird nur noch ein wenig angepasst für serwrite und serread
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    68
    Beiträge
    531
    Hallo raid_ox,

    vermutlich sollte es so gehen...
    (dies ist ein ausschnitt aus dem Yeti Init Funktion, der funktioniert gleich wie Asuro)

    Code:
    //------------------------------------------------------------//
    	//  Init USART for RS232 communication                        //
    	//------------------------------------------------------------//
    	// Init Atmega USART for RS232 communication (connected to Yeti InfraRed transmitter/receiver)
    	// default init
    	UCSRA=0x00;
    	// default init
    	UCSRB=0x00;
    	// select UCSRC, no parity, 1 stop bit, 8 databits per character
    	UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    	// select baudrate 2400bps when using 8.0000MHz oscillator (see table 62 in pdf)
    	UBRRL=0xCF;
    
    	//------------------------------------------------------------//
    	//  Init Timer2, used for generating RS232 IR carrier signal  //
    	//------------------------------------------------------------//
    	//  prepare 36kHz for IR - Communication
    	// WGM21: waveform generation mode 2 => CTC mode => TOP = OCR2
    	//        (Only counting up until value OCR2 (TOP) reached)
    	// COM20: Toggle OC2 on Compare Match
    	// CS20:  No prescaling (so Timer2 clock frequency = 8MHz = 125ns)
    	TCCR2=(1<<WGM21)|(1<<COM20)|(1<<CS20);
    
    	// 0x6E = 110, so frequency is 110 * 125ns = 13.75us = 72.727KHz
    	// as output is toggled, the real frequency is 72.727KHz / 2 = appr. 36KHz
    	OCR2=0x6E;
    
    	//------------------------------------------------------------//
    	//  Set 36KHz carrier pin as output
    	//------------------------------------------------------------//
    	// set carrier signal pin PB3/(MOSI/OC2) as output
     	DDRB|=(1<<PB3);
    Gruss,

    Henk

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    184
    Ich bisher geht das immer noch nicht, naja egal, ich werde dann diese MCU als slave benutzen
    Gruß Raid

    Der ^^ Mann

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

    hast du die Fusebits bei dem neuen ATmega8 korrekt gesetzt?
    Auf externer Takt gestellt. Ein fabrikneuer ATmega8 läuft erst mal mit 1Mhz internem Takt. Dann stimmt natürlich die UART Baudrate nicht. Der Prozessor funktioniert ansonsten, nur halt langsamer.

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    184
    Ach2 Danke marvin. nun aber weiß ich nicht wie man es mit avrdude machen kann
    Gruß Raid

    Der ^^ Mann

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen