Kransteuerung

christian93

Neues Mitglied
19. März 2009
12
0
0
Sprachen
Hi,

Ich würde mir gern eine kabellose Steuerung für einen Kran bauen. Ich habe hier zwei Atmega32. Zur Programmierung verwende ich Bascom. Das Problem ist die serielle Verbindung. Senden klappt, Empfangen aber nicht. Weiß jemand die Funktion für Empfangen über das Hardware-UART? Baudrate: 9600, 16 MHz

Ausserdem brauche ich noch für die kabellose Datenübertragung ein Funkmodul. Kann mir da jemand was empfehlen?
 
Hallo Christian!

Nur mal eine Frage zum allgemeinen Verständnis......


Was ist das für ein Kran?
Spielzeug bzw. Modellbau, oder ein richtiger für echte Lasten? :hmmmm:


Gruß,
Cassio
 
Hallo Christian!

Nun haben wir eine kleine Vorstellung davon, worum es geht!

Ich hätte mir aber gern noch ein paar weiter Informationen gewünscht, als nur fünf Worte. ;)


Dann frage ich mal weiter..... :)
Wenn er nun echte Lasten tragen soll, was ist denn dann die maximale Hubkraft und bis zu welcher Höhe?

Ein sehr wichtiger Punkt ist noch... benutzt du den Kran ausschließlich privat, oder "gewerblich" bzw. bedienen den Kran später auch dritte Personen?

Vielleicht stellst du dein Projekt mal ein klein wenig ausführlicher vor und stellst hier schon mal Pläne und deinen vorläufigen Programmcode ein.
So können sich alle anderen User hier auch schneller ein Gesamtbild verschaffen.


Ups.... was ich vorhin vergessen hatte.....

Erst einmal: Herzlich Willkommen im AVR-Praxis Forum! :ciao:

Gruß,
Cassio
 
Ok sorry für die Lückenhafte Beschreibung, ich versuchs jetzt mal besser :)

Es handelt sich um einen Brückenkran (dieses Bild bringts ziemlich auf den Punkt: http://www.krane-info.com/img/brueckenkrane.jpg).
Er hebt maximal 800 kg auf einer Höhe von ca. 7m.
Ausserdem ist er unter Dach.
Verwendet wird er nur Privat. Ausser mir und meinem Vater wird ihn eigentlich nie jemand bedienen.

Der Kran wird von 8 Schütz gesteuert. Diese werde ich mit einem elektronischem Relais ansteuern (2x dieses wahrscheinlich), da es sich mit einem Schaltstrom von 15mA begnügt.

Programmcode (nur mal zum Testen des UART):
1. Atmel (Sender):
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 4800

Config PINC.0 = Input

Do
	If PINC.0 = 1 Then
		Print 1
	Else
		Print 0
	End If
	Waitms 10
Loop
Sendet 1, wenn PINC.0 = 1



2. Atmel (Empfänger):
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 4800

Confit PORTC.0 = Output

Do
	If Inkey() = 1 Then
		PORTC.0 = 1
	Else
		PORTC.0 = 0
	End If
	Waitms 10
Loop
Schaltet PORTC.0 auf 1, wenn 1 über UART empfangen wird
(der Teil, der nicht funktioniert)

Mfg.
Christian
 
Hallo Christian!

Ich habe zwar gerade nicht viel Zeit und melde mich später noch mal mit dem einen oder anderen Gedanken zu deiner Steuerung, möchte die aber mal kurz zwei BASCOM-Befehle ans Herz legen. ;)

Bis ich wieder an den PC zurück bin, kannst du dir ja mal die Befehle "Printbin" und "Inputbin" ansehen.
Damit kannst du per serieller Verbindung Daten von einem Controller zum anderen senden.... und auch empfangen.
In diesem Zusammenhang solltest du dir auch gleich den BASCOM-Befehl "Open" anschauen. ;)


Schöne Grüße,
Cassio
 
Hallo Christian!

Was deine Kransteuerung betrifft ist der heikle Punkt die Funkübertragung!

Diese muss nicht nur fehlerfreie Befehle senden und empfangen können, sondern auch auf einer störungsfreien Frequenz laufen!

Ich will mal hoffen, dass du nur einen Haken am Kran hast und nicht einen Greifer oder Magneten!
Aber auch wenn eine Last von einigen hundert Kilo am Haken hängt und sich der Kran plötzlich senkt.... während einer von euch darunter steht oder liegt... kann das auch schon sehr gefährlich werden!

Ich besitze leider nicht genug Wissen, um dir wenigstens eine sichere Funkübertragung zu vermitteln und ich bin mir auch nicht sicher, ob sich hier ein anderer User auf dieses glatte Eis begeben möchte....

Selbst wenn wir einen Weg finden würden die Daten sicher zu senden und am Empfänger fehlerfrei auszuwerten bleibt immer noch das Problem mit der Funkfrequenz.
"Offene" und gebührenfreie Frequenzen würde ich jedenfalls dafür nicht benutzen! Das kann ganz böse ins Auge gehen!
Obendrein gibt es auch bei gebührenfreien Funkmodulen bestimmte Richtlinien die du einhalten musst.
So wird z.B. die Sendeleistung vorgeschrieben und sogar wie oft du ein Signal pro STUNDE senden darfst! Bei einigen Frequenzen (glaube bei 868MHZ und 433MHz) sind z.B. nur 36 Funksignale innerhalb einer STUNDE erlaubt! Die Länge des Funksignals ist dabei auch noch beschränkt und kann nicht ewig gesendet werden.

Tja und damit wären wir beim größten Problem.... Du müsstest dir ein Funkmodul besorgen, dass eine geschützte Frequenz benutzt und der Betrieb auch genehmigt wird.

Ich bin mir daher nicht sicher, ob man mit "Hobbymitteln" so eine Steuerung realisieren kann... und sollte!


Vielleicht haben aber andere Mitleser ja noch genauere Informationen zu dem Thema.....

Schöne Grüße,
Cassio :ciao:
 
Danke für den Tipp mit Printbin und Inputbin! klappt super! :)

Nur, dass ich jetzt nicht weiß, wie ich die Bitmanipulation machen soll.
Ich will nähmlich die Daten (8x ein/aus) in ein Byte zusammenfassen und dann senden.
Wie stelle ich das an?

Für die Funkverbindung habe ich mir das ausgedacht:
Ich verwende 3 Atmega's

1. In der Fernbedienung
2. Empfänger und Steuerung
3. Überwachung für den 2. (Abschalten, falls dieser nicht mehr läuft)

Überwachung: Atmega 3 sendet zufällige Daten an 2, der genau das gleiche dann zurückschickt
oder hat jemand ne bessere Idee?


Funkverbindung stelle ich mir so vor:
-Sender schickt Daten (1 Byte)
-Empfänger schickt die Daten zurück (1 Byte)
-Sender vergleicht und schickt ein "OK", wenn die Daten korrekt sind (2 Byte, hohe Sicherheit)
-alle 10 ms wiederholen


Zu den Frequenzen:
Bei 433 MHz ist alles freigegeben, bei 868 nur der Kanal 11

Gegenseitige Störung auf der gleichen Frequenz wird es hier am Land wohl kaum geben ;)
 
Funkfernsteuerung über FSK

Hallo @Chris...,
Funkfernsteuerungen laufen meistens nicht direkt im Binärcode. Das bedeutet,
der Sender wird nicht diekt mit 9600-Baud-Bits moduliert, sondern über Frequency-Shift-Keying-Modulation.
Dabei wird eine Trägerfrequenz im Rhythmus der digitalen Signale versetzt,
Einmal mit "Mark", einmal mit "Space".
Dadurch wird die Übertragungsbandbreite sehr schmal und störungsunempfindlich. Bei 9600 Baud benötigtest Du mindestens 5x 9600 Hz
an Bandbreite, was auch bei Schmalband-FM schon Probleme mit den Nachbarkanälen bringen würde. Der Modulationsindex bei FM liegt ja bei 5 glaube ich. Das heißt, man bräuchte mindestens das 5-fache der höchsten Modulationsfrequenz als Bandbreite (Bessel-Funktion). Bei AM eben wegen der beiden Seitenbänder mindestens das Doppelte der höchsten Modulationsfrequenz.
Ob nun AM zugelassen ist in den besagten Bereichen, weiß ich nicht sicher.
Dann würde ich auch nicht mit 9600 Baud arbeiten, sondern mit wesentlich niedriger Baudrate, also um 50 bis 75 Baud.
Vielleicht können die Amateurfunker unter uns hierzu noch was beisteuern aus der Funkpraxis, gerade was die Funkfernsteuerung anbelangt.

Bei CB-Funk habe ich mal einen Funkerkollegen aus Bergisch Gladbach damit geärgert,
daß ich von Ehrenfeld aus mit der DNT-Puste mal dessen "Selektivruf-Code" auf Band aufnahm und dann mal über diese Tonbandaufzeichnung seinen Empfänger aufsteuern konnte, also das sind dann genau diese Tüdelüdelüt-Töne der FSK-Modulation, die wie es das Beispiel zeigte, auch über 15 bis 20 km Luftline problemlos mit 4 Watt Sendeleistung geklappt hatte.

Tip: Besorg Dir mal so einen Selektivrufzusatz und experimentiere mal ein bißchen damit.
Das sind dann die "klassischen" Funk-Fernsteuersignale.

So long,
Gruß von Oskar01
 
Äääääämmmmm, hallo zusammen,

Weiß jemand die Funktion für Empfangen über das Hardware-UART? Baudrate: 9600, 16 MHz

und

Code:
$regfile = "m32def.dat"
$crystal = 16000000
[COLOR="Red"][B]$baud = 4800[/B][/COLOR]

tut vielleicht nichts zur Sache aber irgendwie passt das nicht, oder?

Grüße,
Markus
 
Hi Markus,

welcome back to community.


Grüsse,

Michael
 
Hallo Markus,

Äääääämmmmm, hallo zusammen,


Zitat:


Weiß jemand die Funktion für Empfangen über das Hardware-UART? Baudrate: 9600, 16 MHz


und




$regfile = "m32def.dat" $crystal = 16000000 $baud = 4800


tut vielleicht nichts zur Sache aber irgendwie passt das nicht, oder?

Grüße,
Markus
Klar, dass das nicht zusammenpasst, hab die Baudrate geändert ;)



Hallo Oskar,
Hallo @Chris...,
Funkfernsteuerungen laufen meistens nicht direkt im Binärcode. Das bedeutet,
der Sender wird nicht diekt mit 9600-Baud-Bits moduliert, sondern über Frequency-Shift-Keying-Modulation.
Dabei wird eine Trägerfrequenz im Rhythmus der digitalen Signale versetzt,
Einmal mit "Mark", einmal mit "Space".
Dadurch wird die Übertragungsbandbreite sehr schmal und störungsunempfindlich. Bei 9600 Baud benötigtest Du mindestens 5x 9600 Hz
an Bandbreite, was auch bei Schmalband-FM schon Probleme mit den Nachbarkanälen bringen würde. Der Modulationsindex bei FM liegt ja bei 5 glaube ich. Das heißt, man bräuchte mindestens das 5-fache der höchsten Modulationsfrequenz als Bandbreite (Bessel-Funktion). Bei AM eben wegen der beiden Seitenbänder mindestens das Doppelte der höchsten Modulationsfrequenz.
Ob nun AM zugelassen ist in den besagten Bereichen, weiß ich nicht sicher.
Dann würde ich auch nicht mit 9600 Baud arbeiten, sondern mit wesentlich niedriger Baudrate, also um 50 bis 75 Baud.
Vielleicht können die Amateurfunker unter uns hierzu noch was beisteuern aus der Funkpraxis, gerade was die Funkfernsteuerung anbelangt.

Bei CB-Funk habe ich mal einen Funkerkollegen aus Bergisch Gladbach damit geärgert,
daß ich von Ehrenfeld aus mit der DNT-Puste mal dessen "Selektivruf-Code" auf Band aufnahm und dann mal über diese Tonbandaufzeichnung seinen Empfänger aufsteuern konnte, also das sind dann genau diese Tüdelüdelüt-Töne der FSK-Modulation, die wie es das Beispiel zeigte, auch über 15 bis 20 km Luftline problemlos mit 4 Watt Sendeleistung geklappt hatte.

Tip: Besorg Dir mal so einen Selektivrufzusatz und experimentiere mal ein bißchen damit.
Das sind dann die "klassischen" Funk-Fernsteuersignale.

So long,
Gruß von Oskar01

Danke für die Info!
Ich würde aber trotzdem gerne bei der Übertragung von Binärdaten bleiben, weil mir das sonst zu kompliziert wird (ausser jemand kann mir das Gegenteil beweisen).




Ich habe mir das Funkmodul mal angeschaut:
http://www.wirelessworldag.ch/data/lprs/ERx00_D.pdf

Hat jemand erfahrung damit / taugt das zu was?

Mfg.
Christian
 
So, ich habe jetzt ein Funkmodul gekauft. Jetzt bekomm ich aber die Übertragung nicht einmal über Kabel zustande.

Das Problem ist, dass das Programm im Empfänger immer wieder hängt (alle 2-10s).
Es bleibt an der Stelle mit dem Inputbin hängen. (6. Zeile nach dem Anfang der Hauptschleife im Empfängerprogramm)

Schätze mal, das hat irgendwas mit dem Timing zu tun.

Weiß jemand, wie man den Fehler beseitigen könnte?

Empfänger:
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

Config Portd.7 = Output
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.4 = Output
Config Portc.5 = Output
Config Portc.6 = Output
Config Portc.7 = Output

Portd.7 = 0
Portc.0 = 0
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
Portc.4 = 0
Portc.5 = 0
Portc.6 = 0
Portc.7 = 0

Dim B As Word
Dim Buf As Word
Dim Code As Word
Dim Inpt As Word
Dim Cwaiting As Byte
Dim Norcvcnt As Word
Code = &B10101111_10011011


Do
    Waitms 1
    Portd.7 = 1
    Cwaiting = Usr.rxc
    If Cwaiting <> 0 Then
      Waitms 1
      Inputbin Inpt
      Norcvcnt = 0
    Else
      Waitms 1
      Norcvcnt = Norcvcnt + 1
      If Norcvcnt > 250 Then
         Inpt = Code
         Norcvcnt = 0
      End If
    End If

    Portd.7 = 0


    B = Inpt Xor Code

    Buf = B And &B10000001_00000001
    If Buf = &B10000001_00000001 Then
      Portc.0 = 1
    Else
      Portc.0 = 0
    End If

    Buf = B And &B10000001_00000010
    If Buf = &B10000001_00000010 Then
      Portc.1 = 1
    Else
      Portc.1 = 0
    End If

    Buf = B And &B10000010_00000100
    If Buf = &B100000010_00000100 Then
      Portc.2 = 1
    Else
      Portc.2 = 0
    End If

    Buf = B And &B10000010_00001000
    If Buf = &B10000010_00001000 Then
      Portc.3 = 1
    Else
      Portc.3 = 0
    End If

    Buf = B And &B10000100_00010000
    If Buf = &B10000100_00010000 Then
      Portc.4 = 1
    Else
      Portc.4 = 0
    End If

    Buf = B And &B10000100_00100000
    If Buf = &B10000100_00100000 Then
      Portc.5 = 1
    Else
      Portc.5 = 0
    End If

    Buf = B And &B10001000_01000000
    If Buf = &B10001000_01000000 Then
      Portc.6 = 1
    Else
      Portc.6 = 0
    End If

    Buf = B And &B10001000_10000000
    If Buf = &B10001000_10000000 Then
      Portc.7 = 1
    Else
      Portc.7 = 0
    End If
Loop

Sender:
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

Config Portd.7 = Output
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinc.6 = Input
Config Pinc.7 = Input

Portd.7 = 1


Dim Send As Word
Dim Code As Word

Code = &B10101111_10011011

Send = 0

Do
   Send = 0


   If Pinc.0 = 1 Then
      Send = Send Or &B10000001_00000001
   End If

   If Pinc.1 = 1 Then
      Send = Send Or &B10000001_00000010
   End If

   If Pinc.2 = 1 Then
      Send = Send Or &B10000010_00000100
   End If

   If Pinc.3 = 1 Then
      Send = Send Or &B10000010_00001000
   End If

   If Pinc.4 = 1 Then
      Send = Send Or &B10000100_00010000
   End If

   If Pinc.5 = 1 Then
      Send = Send Or &B10000100_00100000
   End If

   If Pinc.6 = 1 Then
      Send = Send Or &B10001000_01000000
   End If

   If Pinc.7 = 1 Then
      Send = Send Or &B10001000_10000000
   End If
      Send = Send Xor Code
   Printbin Send
   Waitms 5
Loop
 
Wie überträgst du denn genau? Also was für ne Leitung, Länge usw usw...

Note that the INPUTBIN statement doesn't wait for a <RETURN> but just for the number of bytes.

Der Befehl INPUTBIN wartet nämlich offenbar auf eine bestimmte Anzahl Bits, und wenn da nicht alles ankommt dann wartet er ewig.

Und genau da bist ud schon wieder bei einem Problem deiner Steuerung: Was passiert, wenn du ein "ab-Signal" sendest, und willst einen Stopp machen, und de rkommt nicht vollständig an. Dann wartet der Controller auf das Fehlende Bit, kann aber nie mehr das richtige Datenmuster empfangen, weil er auf dem "Takt" hinterher ist... Folge: Der Kran fährt immer weiter runter usw usw... Jedenfalls hab ich dein Programm so beim überfliegen verstanden, wenn auch nur teilweise... Falls das nicht stimmt -> *Duck und weg*...

Jedenfalls bin ich der Meinung, du solltest verdammt viel Wert auf die Sicherheit der Konstruktion legen, denn wenn bei schwebenden Lasten was passiert...
 
Wie überträgst du denn genau? Also was für ne Leitung, Länge usw usw...



Der Befehl INPUTBIN wartet nämlich offenbar auf eine bestimmte Anzahl Bits, und wenn da nicht alles ankommt dann wartet er ewig.

Und genau da bist ud schon wieder bei einem Problem deiner Steuerung: Was passiert, wenn du ein "ab-Signal" sendest, und willst einen Stopp machen, und de rkommt nicht vollständig an. Dann wartet der Controller auf das Fehlende Bit, kann aber nie mehr das richtige Datenmuster empfangen, weil er auf dem "Takt" hinterher ist... Folge: Der Kran fährt immer weiter runter usw usw... Jedenfalls hab ich dein Programm so beim überfliegen verstanden, wenn auch nur teilweise... Falls das nicht stimmt -> *Duck und weg*...

Jedenfalls bin ich der Meinung, du solltest verdammt viel Wert auf die Sicherheit der Konstruktion legen, denn wenn bei schwebenden Lasten was passiert...

Meine Leitung ist derzeit eine einfache Kabelverbindung (TXD vom Sender an RXD vom Empfänger, ca 5 cm langes Kabel)
Eigentlich dürften bei dieser Kabellänge von ein paar cm und einer Datenrate von 19200 bps keine Fehler passieren. Beide AVR's haben die gleichen Einstellungen (Datenrate, CPU Geschwindigkeit, Fuses), es dürfte also eigentlich keine Probleme geben.

Das mit der Sicherheit habe ich so gelöst:
Erstens habe ich eine Redundanz, da ja mehr bit übertragen werden, als eigentlich benötigt werden, und zweitens, vielleicht ist es dir aufgefallen, ändere ich den PORTD.7 zwei mal pro durchlauf. Falls diese Änderung eine einstellbare Zeit lange (z.B. 50 ms) nicht mehr auftritt, dann wird alles gestoppt.
 
Hat eigentlich jemand Erfahrungen mit dem Funkmodul Amber Wireless AMB8420? Das hab ich mir nämlich gekauft und ich bekomm es einfach nicht zum laufen.
 
wenn der INPUTBIN aber auf eine Bestimmte Anzahl Bits wartet, dann müsstest du den Puffer auch regelmäßig resetten, damit er wieder fehlerfreie Daten empfangen kann...

Tuts denn die Übertragung per Kabel schon? Vorher brauchst mit dem Funk gar nicht anfangen... Kenne die Module übrigens leider nicht...

Gruß Rainer
 
wenn der INPUTBIN aber auf eine Bestimmte Anzahl Bits wartet, dann müsstest du den Puffer auch regelmäßig resetten, damit er wieder fehlerfreie Daten empfangen kann...

Tuts denn die Übertragung per Kabel schon? Vorher brauchst mit dem Funk gar nicht anfangen... Kenne die Module übrigens leider nicht...

Gruß Rainer

Inputbin löscht den Buffer ja automatisch, oder?

Die Funkmodule, die ich gekauft habe, verhalten sich transparent, d.h. die Daten, die ich reinsende, sollten am anderem Ende auch wieder herauskommen (tun sie aber nicht)
Hier ein Link zum Funkmodul: http://amber-wireless.de/58-0-AMB8420.html
Und zum Handbuch: http://amber-wireless.de/files/amb8420_2520_hb_v3_8.pdf
 
Hallo,
die Module sehen interesant aus
Wo hast du die für wie viel gekauft?
Hast dir ja sicher nicht den 400st Gurt besort oder? ;)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)