PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Spektrum Satteliten Empfänger auslesen



MiniMax
24.03.2010, 15:20
Hallo Zusammen,
Ich möchte gerne einen Spektrum Satteliten Empfänger über einen AVR auslesen (parallel zu einem Anderen der an Normalen Servos hängt).
Meine Grundprobleme sind u.A.

- welches Signal liegt am Pin an? (Seriell, I2C, Summensignal...) Ich Blicke da net durch
- Welchr pin is Welcher? GND = Schwarz, VCC = Rot, Signal = Orange?
- Wie kann ich Bascom dazu bewegen, die Kanäle 1-8 auszulesen? Hier mit? (http://www.rn-wissen.de/index.php/RC-Empf%C3%A4nger_auswerten)
- Wie kann ich den Satteliten Empfänger in den Binding Modus versetzen?

Ich freue mich auf eure Antworten \:D/

MiniMax
25.03.2010, 10:18
hat keiner eine Antwort?? Ich blicke durch die Ganzen Internet Beiträge net durch ](*,)

Jaecko
25.03.2010, 11:24
Welcher Typ genau isses denn? (Oder bauen die nur einen?)
Mit der Bezeichnung lässt sich dann ein Handbuch/Datenblatt o.ä. finden, in der Pinbelegung, Signalform etc. alles drinsteht.

MiniMax
25.03.2010, 11:25
Ähm der Ganz normale Satteliten Empfänger von Spektrum ?? Ich habe nur das hier (http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.76g%2FSpectrum.c) gefunden aber C Kann ich net ](*,)

Jaecko
25.03.2010, 11:33
Da wird sicher nicht nur "Satelliten Empfänger" draufstehen. Auf der Herstellerseite gibts so einen z.B. schon mal nicht.

AR12000 DSM2 12CH Receiver
AR6110 DSM2 Microlite
AR6110E DSM2 Microlite
AR7600 DSM2 7-Channel
AR6300 DSM2 Nanoliteetc

Irgend ne Nummer in der Art wird doch draufstehen.

Und in dem C-Quelltext seh ich doch für den UART-Betrieb alles nötige.



Anschuss Spektrum Receiver
// Orange: 3V von der FC (keinesfalls an 5V anschliessen!)
// Schwarz: GND
// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker
//
// ---
// Satellite-Reciever connected on USART1:
//
// DX7/DX6i: One data-frame at 115200 baud every 22ms.
// DX7se: One data-frame at 115200 baud every 11ms.
// byte1: unknown
// byte2: unknown
// byte3: and byte4: channel data (FLT-Mode)
// byte5: and byte6: channel data (Roll)
// byte7: and byte8: channel data (Nick)
// byte9: and byte10: channel data (Gier)
// byte11: and byte12: channel data (Gear Switch)
// byte13: and byte14: channel data (Gas)
// byte15: and byte16: channel data (AUX2)



Diese Information ist Programmiersprachenunabhängig.

MiniMax
25.03.2010, 12:12
Hi, Also einfach mal anklemmen und dann ausprinten?

MiniMax
25.03.2010, 14:58
Hi, also es funktioniert net :-(
Ich bekomme den Empfänger net Initalisiert - wie geht das?

MiniMax
25.03.2010, 16:47
Muss dort was vorher gesendet werden? - ich bitte um Hilfe

MiniMax
26.03.2010, 11:01
Kann niemand die entsprechenden Zeilen aus dem C-Code übersetzen? :-k


// -- Start of USART1 initialisation for Spekturm seriell-mode
// USART1 Control and Status Register A, B, C and baud rate register
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1);
// disable RX-Interrupt
UCSR1B &= ~(1 << RXCIE1);
// disable TX-Interrupt
UCSR1B &= ~(1 << TXCIE1);
// disable DRE-Interrupt
UCSR1B &= ~(1 << UDRIE1);
// set direction of RXD1 and TXD1 pins
// set RXD1 (PD2) as an input pin
PORTD |= (1 << PORTD2);
DDRD &= ~(1 << DDD2);
// USART0 Baud Rate Register
// set clock divider

UBRR1H = (uint8_t)(ubrr>>8);
UBRR1L = (uint8_t)ubrr;
// enable double speed operation
UCSR1A |= (1 << U2X1);
// enable receiver and transmitter
//UCSR1B = (1<<RXEN1)|(1<<TXEN1);

UCSR1B = (1<<RXEN1);
// set asynchronous mode
UCSR1C &= ~(1 << UMSEL11);
UCSR1C &= ~(1 << UMSEL10);
// no parity
UCSR1C &= ~(1 << UPM11);
UCSR1C &= ~(1 << UPM10);
// 1 stop bit
UCSR1C &= ~(1 << USBS1);
// 8-bit
UCSR1B &= ~(1 << UCSZ12);
UCSR1C |= (1 << UCSZ11);
UCSR1C |= (1 << UCSZ10);
// flush receive buffer explicit
while(UCSR1A & (1<<RXC1)) UDR1;
// enable RX-interrupts at the end
UCSR1B |= (1 << RXCIE1);
// -- End of USART1 initialisation
return;
}


Ich bitte nochmals um Hilfe

MiniMax
26.03.2010, 16:05
Was is los? Kann keiner C? Bittttteeeee [-o< [-o< [-o<

Ceos
27.03.2010, 00:08
ähm wenn sich nicht jemand schonmal damit beschäftigt hat, wird sciher kaum jemand sich die mühe machen und für dich das datenblatt durcharbeiten und dir vormalen was sache ist ... der fetzen da oben ist nur zum initialisieren der schnittsstelle, jedoch wird da rein garnichts übertragen, nur eben die schnittstelle initialisiert

und 5fach posts machen das topic auhc nicht lesenswerter ...

was du brauchst, sind die daten für die verbindeung (baudrate usw. ) und eine lib oder jemanden der dir hilft ein passendes "terminal programm" für den µC zu schreiben ... und dann die textbefehle über UART an deinen receiver senden bzw. die antworten auslesen und interpretieren .. so gaaanz ohne C-kenntnisse würde ich sagen das wird nix ... da muss man schon tiefer in die c-trickkiste greifen

MiniMax
27.03.2010, 10:19
Hi, naja mein Problem ist ja nur das Initalisieren der Schnittstelle den Rest habe ich schon wie die baud Rate und und und!

dukedolphin
30.03.2010, 18:58
Hi Minimax,
hast du´den satelitt schon mit einem sender gepaart?
falls ja welchen sender hast du genommen.
Bei den 9-12 Kanal Sendern habe die ein anderes protokoll.
Eine beschreibung des protokolls findest du im svn beim Mikrokopter.
Zum Binden.
Ich kenne nur einen der das bislang drauf hat und der hat den
satelitten mit gnd an einem transistorausgang angeschlossen....
Denke da wird noch eine ausschaltsequenz drinnen seien.
GRuß Boris
(der das auch demnächst proggen will)

StevieL
31.03.2010, 09:18
Hallo MiniMax

... den Rest habe ich schon wie die baud Rate und und und!

Was willst du denn da noch initialisieren, wenn du das schon gemacht hast?! Der C-Code macht doch nichts anderes, als die USART-Register von Hand entsprechend zu setzen. Wenn du das 1:1 nachbilden willst, dann setze doch die Register auch von Hand. Das ist ja wohl problemlos zu übersetzen, die Namen der Register bleiben ja gleich.

dukedolphin
31.03.2010, 09:56
ups ich hab noch mal ganz von vorne gelesen.
Zu den ursprünglichen fragen
- welches Signal liegt am Pin an? (Seriell, I2C, Summensignal...) Ich Blicke da net durch
---ein serielles mit 115k
- Welchr pin is Welcher? GND = Schwarz, VCC = Rot, Signal = Orange?
Orange:3V
Schwarz: GND
Grau: TX, muss an den RX deines avr
- Wie kann ich Bascom dazu bewegen, die Kanäle 1-8 auszulesen? Hier mit?
com initialisieren und lesen. bits entsprechen shiften und fertig.
- Wie kann ich den Satteliten Empfänger in den Binding Modus versetzen
am besten bindest du den satelitt mit einem empfänger.
Je nach empfänger und funke wird auch das protokoll bestimmt.

Schreib doch mal bitte was für einen avr du nimmst, und vor allem welchen quarz du einsetzt. ohne kann es nicht klappen da die serielle übertragung zu fehlerhaft wird.
Du musst auch bedenken das der pegel des seriellen signals mit 3v evtl zu gering ist.
GRuß Boris

MiniMax
31.03.2010, 11:56
Hi also Gebunden is es mit ner DX6i und habe nen ATMEGA 32 mit 16 MHZ
Wie soll ich denn den 3V Pegel Anpassen?? Ich bekomme die Schnittstelle auch net Initialisiert!! ](*,)
Könntest du nen BSP Posten? Oder einer von Euch?? Wäre Toll wenn es klappen würde

dukedolphin
31.03.2010, 15:53
Hi minimax.
das mit den 16mhz ist schon mal schlecht.
Da hast du einen 7% fehler bei der übertragung, das kann nix werden.
Um seriell zu übertragen bietet sich ein baudratenquarz an.
•11,0592 MHz
•12,2880 MHz
•14,7456 MHz
diese würden sich bei 5V anbieten.
Ich gehe davon aus dass der atmega32 noch andere sachen macht als die daten empfangen oder?
In diesem fall solte der Empfang per interrupt geschehen.

MiniMax
31.03.2010, 16:03
Also was heißt dass? wenn ich einen ATMEGA8 mit der Auswertung und dem Empfang beschäftige und dann die Daten weitersende is das dann besser?

Jaecko
31.03.2010, 16:14
Ob das ein M32 oder ein M8 ist ist egal. Es geht um die Frequenz des Quarzes. Da sind 16MHz halt von den Baudraten aus gesehen ein "krummer" Wert.

Wobei ich aber selbst auch schon 115kBit mit 16MHz gefahren bin und noch nie irgendwelche Übertragungsprobleme hatte.

dukedolphin
31.03.2010, 16:15
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 115200
Dim werte(30) As byte
Dim I As Byte

i=0
On URXC OnRxD
Enable URXC
Enable Interrupts

Do
'hier kann dein prog stehen
'im hintergrund werden die daten ins array "werte" geschrieben
'das graue kabel gehört an pin 14 des mega32
Loop


OnRxD:
Incr I
Werte(i) = Udr
If I = 20 Then I = 0

Return
den rest kannst du ja

MiniMax
31.03.2010, 16:16
Ok aber wie Initalisiee ich das ding? Das kapiere ich net auch im C Code net

dukedolphin
31.03.2010, 16:24
:-s
steht doch in dem code.
GRuß Boris
edit
die frequenz musst du natürlich auf 16000000 ändern

MiniMax
31.03.2010, 17:27
Ja aber was/ wie soll ich über Uart senden? Ich habe noch nie mit Uart gearbeitet nur Print Input ;-)

dukedolphin
31.03.2010, 18:17
Das steht doch in der überschrift.
Ist das hier so ein test für neulinge? 8-[
Falls ja. Jungs ihr habt gewonnen ich geb auf.
GRuß Boris

MiniMax
31.03.2010, 18:23
Ja aber wie gesagt ich kann kein C!!!


// -- Start of USART1 initialisation for Spekturm seriell-mode
// USART1 Control and Status Register A, B, C and baud rate register
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1);
// disable RX-Interrupt
UCSR1B &= ~(1 << RXCIE1);
// disable TX-Interrupt
UCSR1B &= ~(1 << TXCIE1);
// disable DRE-Interrupt
UCSR1B &= ~(1 << UDRIE1);
// set direction of RXD1 and TXD1 pins
// set RXD1 (PD2) as an input pin
PORTD |= (1 << PORTD2);
DDRD &= ~(1 << DDD2);
// USART0 Baud Rate Register
// set clock divider

UBRR1H = (uint8_t)(ubrr>>8);
UBRR1L = (uint8_t)ubrr;
// enable double speed operation
UCSR1A |= (1 << U2X1);
// enable receiver and transmitter
//UCSR1B = (1<<RXEN1)|(1<<TXEN1);

UCSR1B = (1<<RXEN1);
// set asynchronous mode
UCSR1C &= ~(1 << UMSEL11);
UCSR1C &= ~(1 << UMSEL10);
// no parity
UCSR1C &= ~(1 << UPM11);
UCSR1C &= ~(1 << UPM10);
// 1 stop bit
UCSR1C &= ~(1 << USBS1);
// 8-bit
UCSR1B &= ~(1 << UCSZ12);
UCSR1C |= (1 << UCSZ11);
UCSR1C |= (1 << UCSZ10);
// flush receive buffer explicit
while(UCSR1A & (1<<RXC1)) UDR1;
// enable RX-interrupts at the end
UCSR1B |= (1 << RXCIE1);
// -- End of USART1 initialisation
return;
}

Kann ich dass so in Bascom übernehmen??

dukedolphin
01.04.2010, 11:01
Die 4 Zeilen
$baud = 115200
On URXC OnRxD
Enable URXC
Enable Interrupts
machen ungefähr genau das gleiche wie der C code den du andauernd postest :shock:
Man müsste es nur mal ausprobieren.
Gruß BOris

MiniMax
01.04.2010, 11:12
Ja aber warum Blinken die LED's dauernt??? Der muss doch initalisiert werden??? Also nen Startsignal oder so??? Und muss der Sattelit mit dem AVR über einen Max232 anschließen??

dukedolphin
01.04.2010, 11:53
Und warum blinkt mein xmup?
WELCHE LEDS? So ein satelitt von JR oder Spektrum wie ich sie kenne hat EINE LED.
Und nein du brauchst keinen max232!!! sondern einen transistor der die 3V pegel des satelitten auf 5V verstärkt. (muss nicht kann aber)
Die led (des satelitten) könnte blinken weil du den sender aus hast?!
Oder weil du den sender nicht gebunden hast oder weil du den satelitt zerstört hast weil du die kabel falsch angeschlossen hast (s.o.) oder ..........................................

Ich zumindest werde mich wieder aus diesem Forum verabschieden.
Der gefrustete Duke

MiniMax
01.04.2010, 11:57
Hää?? Was hat das Forum mit Mir zu tun? Ich frage nur warum die LED Blinkt und ich kein Signal bekomme aufm µC ??? Gebunden is er Sender is an und der Sattelit is IO ?

Willa
20.07.2011, 10:59
Hi,
bevor ich selber anfange zu programmieren: Gibt es hierfür mittlerweile eine funktionierende Bascom Lösung?