Forum: Mikrocontroller und Digitale Elektronik fdevopen,usart,atmega1280,c,sms (pdu)


von Henning (Gast)


Lesenswert?

Hi!
Ich habe hier einen Atmega1280 und möchte gern eine SMS versenden. 
Hierzu habe ich mir den SMS-Quellcode von Ulrich Radig als Basis 
genommen.
Ulrich gibt fdevopen eine Uart_putchar und macht die Ausgaben dann 
weiter mit printf. Das funktionierte bei mir nicht. Darum habe ich so 
ziemlich alles zeichenweise über uart_putc ausgegeben. Funktioniert auch 
alles und sieht gut aus. Bis auf die Nachricht selbst.
Nachdem sie gemäß Radig so ins PDU-Format codiert wurde:

//erzeugen des Nachrichten Strings
  while (nachricht[tmp1] != 0){
    nachrichtneu[tmp2] = (nachricht[tmp1]&0x7F)>>shift;
    if (shift != 0){
      nachrichtneu[tmp2-1] |= 
(nachricht[tmp1]&((1<<shift)-1))<<(8-shift);
      };
    shift++;
    tmp1++;
    if (shift == 8){
      shift=0;
    }
    else{
      tmp2++;
    };
  };
  nachrichtneu[0]= tmp1;



Gibt er sie so aus:

//Senden Nachrichten String
  for (tmp1 = 0;tmp1<tmp2;tmp1++){
    printf("%02X", nachrichtneu[tmp1]);
  };


Hier liegt mein Problem. Wenn ich nachrichtneu einfach zeichenweise mit 
putc ausgebe kommt nur Müll auf der seriellen an. Ulrich Radig gibt die 
Zeichen hier aber ja auch als unsigned hex (X) aus. Da liegt vermutlich 
der Hund begraben, oder? Kann ich das irgendwie über die serielle 
Schnittstelle bringen ohne fdevopen zu benutzen?

von Florian (Gast)


Lesenswert?

Hallo Henning,

was meinst Du mit "es kommt nur Müll an"? Die PDU Nachricht kannst Du 
nicht mehr sinnvoll lesen. Sie ist Müll! Genau wie der gesamte PDU Mode. 
Wer sich den ausgedacht hat dürfte mir Nachts nicht in einer dunklen 
Gasse begegnen! Wenn Du irgendwie kannst mach es im Textmode.

Ich habe die PDU - SMS Nachricht auch als einzelne Zeichen ausgetaktet. 
Bei mir hat das funktioniert. Leider nur SMSe bis maximal 15 Zeichen. 
Ich habe aber nicht rausbekommen warum.
Ich bin dann auf den Textmode umgestiegen. Der funktioniert wunderbar.

Ich hoffe Dir mit meiner sehr emotionalen und fachlich fragwürdigen 
Antwort trotzdem geholfen zu haben ;-) Ich habe mich einfach zu lange 
mit dem PDU Mode rumgeschlagen.

Gruß
Florian

von Henning (Gast)


Lesenswert?

Danke, danke. Mit Müll meinte ich Müll. Also keine in Zeichen 
darstellbaren Bitmuster mehr. Ich habe das Problem aber gelöst. 
Vermutlich hat eine der von mir genutzten Libs vorher schon ein fdevopen 
auf einen anderen Kanal gemacht. So gehts jetzt:

FILE* me=fdevopen (uart3_putc, NULL);

for (tmp1 = 0;tmp1<tmp2;tmp1++){
    fprintf(me,"%02X", nachrichtneu[tmp1]);
  };


Na mal sehen, wanns das nächste Mal hakt ;)

Grüße!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.