Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: RS232 Kategorie: Programmierung C (von Josef - 5.08.2009 16:55)
Als Antwort auf Re: RS232 von PeterS - 4.08.2009 23:44
Ich nutze:
C-Control Pro Mega128
> > Hallo Peter,
> >
> > danke für die rasche antwort, ich habe mir auf deinen rat hin ein speicherskope besorgt und mich in die
> > schnittstlle gehängt.
> > Zur info, es handelt sich um eine schnittstelle von einem PV-Wechselrichter
> > der von einem datenlogger abgefragt wird und der datenlogger sendet fertig aufbereitet daten an den PC, wo
> > man laut hersteller mitlesen kann.
> >
> > zur definition die c-control pro bekommt die daten über einen max 232 auf die
> > 2te schnittstelle (0=GND, 1=+5V).
> > die folgende pegelbeschreibung ist auf pin x2_11 gemessen:
> > nun zu den pegeln auf der schnittstelle->
> > Anfrage vom Datenlogger an wechselrichter (wird laufend gesendet) -> Startbit=0, 8 datenbits,
> > 1tes Stopbit=0, 2tes Stopbit=1
> >
> > aufbereitete Daten vom logger (wird alle 4,5 sec gesendet) -> Startbit=0, 8 Datenbits, 2 Stopbits=1
> > in diesem format kommen mehrere bytes.
> >
> > Ich habe auch das ganze mit einem vorgeschalteten inverter versucht -> hat auch nicht funktioniert.
> >
> > kann es sein, dass der von dir unten erzeugte frame error das problem darstellt?
> >
> > danke für deine anregungen
>
> Der frame error wird nicht von mir erzeugt, das macht der UART im Atmel selbst. Meines Erachtens
> müssen Stopbits high sein. Was Du hast wäre ein -> Startbit, 8Bit Daten, Parity = space, 1 Stopbit
>
> Der Atmel UART kann aber nur Parity = none, odd, even. Vielleicht kann man im 9 Bit Daten Modus
> ein Parity = space erzeugen. Aber wie schon gesagt, 9 Bit Daten werden momentan von den UART
> Library Routinen der C-Control Pro nicht unterstützt.
>
> Frag doch bitte mal den Hersteller des Geräts, was für ein serielles Format er erzeugt. Dann
> hättest Du Gewissheit, ob Du richtig gemessen hast.
>
> Gruss Peter
> Routinen

hallo Peter,

ich habe vom hersteller die unterlagen über die schnittstelle, laut beschreibung wird das mit dem ersten
stopbit 0 und dem zweiten 1 deswegen vom datenlogger erzeugt, damit der wechselricher erkennt, dass es
sich um eine anfrage an ihn handelt. 2 stopbit 1 heiÃ?t daten werden vom datenlogger an den pc gesendet.

ich habe bisher die daten mit schieberegister und etwas hardware eingelesen und dann in die c-control I
und in weiterer folge nach einem umbau in die c-control 2.0 eingelesen.-> problem mit 3200 baud.
da bei der ccontrol pro die schnittstelle mit  die 3200 baud eizustelllen ist habe ich diesen versuch
durchgeführt. ebenfalls möchte ich einige zeitkritische anwendungen (UTA baustein von conrad) mit
den pro durchführen die mit der alten c-control nicht realisierbar sind.

kann man eventuell den uart über eine assemblerroutine ansprechen->wegen der 9datenbits?

danke
>
> >
> > Josef
> >
> > > > hallo zusammen
> > > >
> > > > habe mir ein ccontrol pro mega 128 gekauft um über eine serielle
> > > > schnittstelle daten einzulesen.
> > > >
> > > > die schnittstelle liefert mit 3200 baud 1 startbit 8 datenbits und 2
> > > > stopbits, wobei das erste stopbit high und das zweite low ist.
> > >
> > > Hallo Josef,
> > >
> > > die Schnittstelle ist mit 2 Stopbits, das 1. high, das 2. low doch ziemlich exotisch. Ich
> > > kenne eigentlich nur, das beide Stopbits high sind. Der Receiver im Mega128 ignoriert laut
> > > Datenblatt das zweite Stop Bit. Allerdings wird bei 1. Stopbit low und 2. Stopbit high ein
> > > Frame Error erzeugt.
> > >
> > > Laut Datenblatt können die Atmel Mega auch nur high Stopbits erzeugen. Die Schnittstelle kann
> > > auch kein Mark oder Space Parity, allerdings kann man wohl pfuschen, in dem man 9Bit Daten
> > > angibt, und damit das Parity erzeugt. 9Bit Daten werden allerdings zur Zeit von der C-Control
> > > Pro Library nicht unterstützt.
> > >
> > > Schau doch mal im Oszi, was wirklich für Daten ankommen, die vom Mega128 gelesen werden sollen.
> > > Das klingt mir etwas abenteuerlich mit 2 unterschiedlichen Stopbits.
> > >
> > > Gruss Peter
> > >
> > > >
> > > > das program schaut so aus
> > > > // Hauptprogramm
> > > > //
> > > > void main(void)
> > > > {
> > > >     byte c;
> > > >     char Text1[37];
> > > >     char Text2[27];
> > > >
> > > >     Text1="-- Test serielle Schnittstelle --";
> > > >     Text2="-WR Schnittstellentest-";
> > > >
> > > >     Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,47);
> > > >                                                     //Init RS232: 19200, bps, 8 Bit, 1 Stop, NP
> > > >     Serial_Init(1,SR_8BIT|SR_2STOP|SR_NO_PAR,287);   //287
> > > >                                                     //Init RS232: 3200, bps, 8 Bit, 2 Stop, NP
> > > >     c=0;
> > > >
> > > >     Serial_WriteText(0,Text1);
> > > >        Serial_WriteText(0,Text2);
> > > >      {
> > > >             Serial_Write(0,c);
> > > >             Serial_WriteText(0,"1");
> > > >             c=Serial_Read(1);
> > > >             Serial_WriteText(0,"2");
> > > >             Serial_Write(0,c);
> > > >             Serial_WriteText(0,"3");
> > > >      }while (1);
> > > > }
> > > >
> > > >
> > > > das programm bleibt bei Serial_WriteText(0,"1") also schreibt noch 1 raus hängen.
> > > > was auch noch eigenartig ist, es wird vom auf den monitor diese Zeile -> Wert von c
> > > >  (Serial_Write(0,c);) nicht geschrieben;
> > > > er wartet auf daten von der schnittstelle. habe einen PC angehängt und 2 stopbits über
> > > > die RS 232 geschickt, das funktioniert mit jeder baurate. von der zweiten schnittstelle werden auch
> > > > am PC daten empfangen.
> > > >
> > > > hat vielleicht jemand eine idee?
> > > >
> > > > danke


    Antwort schreiben


Antworten:

Re: RS232 (von Olaf Breuer - 23.01.2011 16:48)