- 12V Akku mit 280 Ah bauen         
Seite 6 von 9 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 89

Thema: 1 Servo mit 2 Tasten ansteuer, aber wie :-(

  1. #51
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    Anzeige

    Powerstation Test
    Hi,

    ich will nur Befehle (High Signal) zum Input Pin´s des µC Schicken.
    Später (viel Später) soll nur der Livestream von der Cam zum PC geschickt werden.

    Interruptgesteuert... , muss mal nachlesen oder hast du ein Beispiel dazu?

  2. #52
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ein Beispiel habe ich nicht bei der Hand, ich verwende sonst die Lib von Fleury

  3. #53
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    Sag mal, hast du icq? Dann könne wir gern gezielt/schnell miteinander komunizieren.

    Lib von Fleury sagt mir jetzt nichts, wie ist die aufgebaut?

  4. #54
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    http://jump.to/fleury
    Unter AVR GCC Librarys gibt es diese.
    ICQ oder so was habe ich nicht.

  5. #55
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    Danke für diesem Link, aber mein englisch ist nicht so toll und verstehe daher nicht viel

    das Programm in uartlibrary ist ja groß...
    Kannst du oder ein andere der sich mit UART auskennt mir es besser beschreiben, wie das so funktioniert oder einen kleine Beispiel dazu?

    War mein code falsch oder bin ich auf den richtigen Weg?

  6. #56
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Du bist grundsätzlich auf dem richtigen Weg, die while Schleife ist aber für senden.

  7. #57
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    So müsste der Code aussehen oder?:

    Code:
    int main(void)
    {
        /* UART einstellungen */
        UBRRH = UBRR_VAL >> 8; 
        UBRRL = UBRR_VAL & 0xFF; 
        UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); // UART TX,RX einschalten
        UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1
        
    	/* Output einstellen */
         DDRB = (1<<PB1);           /* Pin PB1 als Ausgang für Led */
    		
    	/* Zeichen empfangen */
    uint8_t Usart_Rx(void)
    {
        while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
            ; /* Hier muss jetzt der Befehl rein wenn ich z.b. W drücke PB1 auf high */
        return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
    }
    }
    Wie programmiere ich, dass z.B. "W" in ASCII ungewandelt wird und mir PB1 auf high stellt?

  8. #58
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    63
    Beiträge
    534
    @SimLock
    >So müsste der Code aussehen oder?:
    NEIN

    Anmerkung: main() ist genauso eine Funktion, wie auch Usart_Rx() - diese können nicht verschachtelt werden! Wobei so der "UART-Empfang" nicht funktioniert. Das Geht über Interrupt und füllt dann globalen Puffer. Da implementiert man auch Verhalten gegen Pufferüberlauf und (Übertragungs-)Fehlerkontrolle.

    > dass z.B. "W" in ASCII ungewandelt wird
    char x = 'W';

    PB1 = "high"; // diese Zeile ist ein Joke!
    [PortB |= (1 << 0x01); heißt es richtig - nur verstehst Du auch, was hier passiert, warum ein |-Operator benutzt wird, was der '<<'-Operator bewirkt - das sind Grundlagen!]

    > Wie programmiere ich,
    Kleiner Tipp, frag Dr. Google - "C für Anfänger" wäre so ein Suchkriterium.
    Sorry, meine Meinung ist, Du kannst hier im Forum gerne fragen bei Problemen, aber die Grundzüge von C kannst Du besser aus Büchern lernen.

    Und irgendwelche Libs zu nehmen, wenn man von den Grundzügen keine Ahnung hat, ist der falsche Weg - das macht dann Dir auf Dauer keinen Spaß.
    Kleiner Tipp, schau die Codeschnippsel im Netz an, wie es andere gelöst haben, daraus kann man auch gut lernen.
    Ich kann mir keine Signatur leisten - bin selbständig!

  9. #59
    Benutzer Stammmitglied
    Registriert seit
    11.10.2007
    Beiträge
    77
    Danke für dein Tip!

    Das mit der Funktion () verstehe ich.
    Ich habe mich beim Markieren, einfügen verklickt.

    Frage zu deinen Code:
    PortB |= (1 << 0x01);

    Der Code was ich geschrieben habe, macht doch die gleiche funktion:
    DDRB = (1<<PB1);

    Ich bin ja grade erst paar Tage hierbei und lerne fleißig

  10. #60
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ich habe mal schnell was zusammengeschrieben. Die Timerwerte und OCRx-Werte mussst du für dich anpassen. Es geht mit den Zahlen am Tastenblock 2,4,6,8,0.
    Code:
    #include <avr/io.h>         
    #include <stdbool.h>
    #include <stdlib.h>
    #include <avr/io.h>
    #include <AVR/iom8.h>
    #include <inttypes.h>
    #include <avr/interrupt.h>
    
    #define F_CPU 8000000    // clock
    #define	BAUD	9600
    #define bauddivider (unsigned int)(F_CPU / BAUD / 16 - 0.5)
    volatile unsigned char rxwert=0x30;
    
    ISR(USART_RXC_vect){
    rxwert= UDR;
    PORTB=(1<<PB0);
    }
    
    void timer1_init(void)
    {
     TCCR1A = (1<<WGM11)|(1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<COM1B0); // initalize mega8 Timer1 with 9Bit, inverted, Prescaler 256
     TCCR1B = (1<<CS12); // this gives us a signal with 21.76ms at 12MHz
    
     OCR1A = 486; // pulse of 1.5ms 512- 1500*(F_CPU/256/1000000)/2
                 
     OCR1B = 486;
    }
    void usart_init(void){
    UBRRL = bauddivider;			//set baud rate
    UBRRH = bauddivider >> 8;
    UCSRB = (1<<RXCIE)|(1<<RXEN);
    UCSRC = (1<<URSEL)|(3<<UCSZ0);
    }
     int main (void)
         {
    timer1_init();
    usart_init();
    
         DDRB = (1<<PB0)|(1<<PB1)|(1<<PB2);           /* Pin PB1 2  als Ausgang für Servo */
       
         DDRD  &= (~ (1<<PD2)|(1<<PD3)|(1<<PD0)|(1<<PD1)); /* Pin D als Eingang */
         PORTD |= (1<<PD2)|(1<<PD3)|(1<<PD0)|(1<<PD1); /* Pull Up  aktivieren */
    sei();
       
    while(1){
    if(rxwert==0x30){
       if (!( PIND & (1<<PIND2)))      /* mache was wenn PinD2 low ist */
       {
          OCR1A=470;
          }
       
       if (!( PIND & (1<<PIND3)))      /* mache was wenn PinD3 low ist */
       {
          OCR1A=499;
       }
       
       if (( PIND & (1<<PIND2))&&(PIND & (1<<PIND3))) {  /* Mitte wenn keine Taste */
        	OCR1A = 486;
       }
       if (!( PIND & (1<<PIND0)))      /* mache was wenn PinD0 low ist */
       {
          OCR1B=470;
          }
       
       if (!( PIND & (1<<PIND1)))      /* mache was wenn PinD1 low ist */
       {
          OCR1B=499;
       }
       
       if (( PIND & (1<<PIND0))&&(PIND & (1<<PIND1))) {  /* Mitte wenn keine Taste */
        	OCR1B=486;
       }
       }
    switch(rxwert){
    	case 0x38 :
    		OCR1A=470;
    		break;
    	case 0x32 :
    		OCR1A=499;
    		break;
    	case 0x34 :
    		OCR1B=470;
    		break;
    	case 0x36 :
    		OCR1B=499;
    		break;
    		}
    }
    }
    Ein gutes C-Tutorial ist auch das hier: http://www.mikrocontroller.net/artic...R-GCC-Tutorial

    Hubert

Seite 6 von 9 ErsteErste ... 45678 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen