- Labornetzteil AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: Daten von Software UART empfangen

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Danke!!
    dann werde ich mir mal die BASCOM-Hilfe anschauen und es mal probieren.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Ich habe schon die BASCOM-Hilfe durchforstet, aber nichts gefunden
    Jetzt bin ich aber auf die Idee gekommen über ein Low-Signal dem ATMega zu "sagen", dass was empfangen werden soll und er erst in eine Schleife geht, wenn das Signal wirklich anliegt.
    Aber da ich diese Signalleitung auch zum Resetten (<--mit doppeltem "t"???) verwende, habe ich die Frage, wie lange ich den Reset-Pin auf low ziehen kann, ohne dass er resettet.
    Ich werde gleich aber auch nochmal ins DB schauen

    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    für den empfang mit der software UART kann ich nur die version mit dem interrupt empfehlen... bin gerade an nem projekt indem ich es verwende...

    hier ein kleiner auszug aus meinem code must ihn halt noch abändern für deinen prozi... wichtig ist einfach dass der port für den empfang an einem interrupt pin hängt... bei mir wird der anfang der zu empfangenen daten mit einer 1 erkannt...

    Code:
    Open "Comb.6:9600,8,n,1" For Input As #2
    
    Config Int0 = Falling
    On Int0 Int0_isr
    Enable Int0
    
    Enable Interrupts
    
    do
    
    loop
    
    Int0_isr:
    
    Temp = Inkey(#2)
    
          If Temp = 1 Then
                Temp = 0
    
                Servo1 = Waitkey(#2)
                Servo2 = Waitkey(#2)
                Speed = Waitkey(#2)
          End If
    Return

    gruss bluesmash

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Das blöde ist nur, dass bei mir schon alle Interrupt-Ports belegt sind
    Sonst hätte ich es auch erst so versucht.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    was hast du denn alles an den interrupts? ev. könnte man ja 2 zusammenfassen... indem man 2 auf einen interrupt legt und zusätzlich die beiden signale auf je einen normalen port legt, dann in der interrupt routine die beiden ports abfragen und schauen welcher interrupt ausgelöst hat....

    gruss bluesmash

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    @Jon
    Bluesmash hat den richtigen Weg beschrieben. Du solltest es in einer ISR abfangen.

    Da Du auch mit einem ATMEGA8 arbeitest, verweise ich mal zur Info auf mein ATMEGA8-Projekt mit Software + Hardware UART:
    https://www.roboternetz.de/phpBB2/ze...ag.php?t=26041

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Ich verwende keine Interrupts. Ich habe nur noch einen Pin frei, den habe ich jetzt mit dieser Signal-Leitung belegt.
    Weshalb ich kein Interrupt verwenden kann:
    1.Kein Pin frei, der Interrupt hat
    2.Kann ich nicht immer einen Interrupt vertragen, da ich auch die Signale abfragen muss, die von der Fernbedienung kommen. Und wenn er mich dann bei Vorwärtsfahren unterbricht, dann kann ich nicht bremsen. Kommt also eine Kannte, habe ich ein Problem.
    Ich könnte zwar den Bot stoppen, aber das möchte ich nicht.

    Ich werde es jetzt so mal probieren und schauen, was herauskommt.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    Zitat Zitat von Jon
    Ich verwende keine Interrupts.
    Hallo Jon,

    wie schon Bluesmash andeutete - es war nur ein guter Rat.
    Wenn Du Dich mit Interrupts beschäftigst, wirst Du erkennen, das eine ISR der einzige Weg ist, um diese Unterbrechungen von INKEY/WAITKEY/GETRC5 o.ä. zu vermeiden.

    Was benutzt Du für eine Fernsteuerung?

    Zitat Zitat von Jon
    Das blöde ist nur, dass bei mir schon alle Interrupt-Ports belegt sind
    Wirklich? Der Atmega8 besitzt mind. 4 Eingänge um Level-Interrupts zu erzeugen.
    Eingänge: INT0, INT1, Analog Comparator ANA_COMP und noch den Timer/Counter1 Capture Event ICP1 (TIFR.ICF1)

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Zitat Zitat von -tomas-
    Was benutzt Du für eine Fernsteuerung?
    Diese

    Zitat Zitat von -tomas-
    Wirklich? Der Atmega8 besitzt mind. 4 Eingänge um Level-Interrupts zu erzeugen.
    Eingänge: INT0, INT1, Analog Comparator ANA_COMP und noch den Timer/Counter1 Capture Event ICP1 (TIFR.ICF1)
    Der muss aber auch mit 4µCs und über Funk kommunizieren. Da ist kaum weiterer Platz...

    Aber ich habe es jetzt geschafft. Ich habe es hinbekommen, wenn ich mit dem Prog fertig bin, kann ich es mal auf meine Seite stellen.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Zitat Zitat von Bluesmash
    für den empfang mit der software UART kann ich nur die version mit dem interrupt empfehlen... bin gerade an nem projekt indem ich es verwende...

    hier ein kleiner auszug aus meinem code must ihn halt noch abändern für deinen prozi... wichtig ist einfach dass der port für den empfang an einem interrupt pin hängt... bei mir wird der anfang der zu empfangenen daten mit einer 1 erkannt...

    Code:
    Open "Comb.6:9600,8,n,1" For Input As #2
    
    Config Int0 = Falling
    On Int0 Int0_isr
    Enable Int0
    
    Enable Interrupts
    
    do
    
    loop
    
    Int0_isr:
    
    Temp = Inkey(#2)
    
          If Temp = 1 Then
                Temp = 0
    
                Servo1 = Waitkey(#2)
                Servo2 = Waitkey(#2)
                Speed = Waitkey(#2)
          End If
    Return

    gruss bluesmash

    Hi,
    wie wird das von dem anderen Controller angesteuert? Also wie sendest du die Bytes? Ich hab folgenden Code für den Servocontroller:
    Code:
    $regfile = "attiny2313.dat"                               
    $crystal = 8000000                                          
    
    
    Waitms 100
    
    
    Config Servos = 4 , Servo1 = Portb.0 , Servo2 = Portb.1 , Servo3 = Portb.2 , Servo4 = Portd.6 , Reload = 10
    
    Config Portb = Output
    Config Portd.6 = Output
    
    
    Config Int0 = Falling
    On Int0 Int0_isr
    Enable Int0
    
    
    Enable Interrupts
    
    
    Servo(1) = 100
    Servo(2) = 100
    Servo(3) = 100
    Servo(4) = 100
    
    Dim Temp As Byte
    Dim New As Bit
    Dim Servo_num As Byte
    Dim Servo_pos As Byte
    
    Open "Comd.2:9600,8,n,1" For Input As #2                     
    
    Do
    If New = 1 Then
     Servo(Servo_num) = Servo_pos
     New = 0
    End If
    Loop
    
    Int0_isr:
    
    Temp = Inkey(#2)
    
          If Temp = 1 Then
                Temp = 0
    
                Servo_num = Waitkey(#2)
                Servo_pos = Waitkey(#2)
                New = 1
          End If
    Return
    Und das is der Code von dem Controller, der dem Servocontroller die "Befehle" gibt:
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Waitms 100
    
    
    Do
    Print 1
    Print 1
    Print 170
    
    Wait 2
    
    Print 1
    Print 1
    Print 70
    
    Wait 2
    Loop
    End
    Dadurch sollte der Servo sich immer vor und zurückdrehn. Allerdings bewegt er sich keinen Millimeter. Es muss am Soft-UART liegen, wenn ich den Servo direkt ansteuer gehts. Ich denke mal dass die "Print"-Befehle nicht in Ordnung sind.

    Kann mir jemand helfen?

    MfG

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress