Mikrokontrollerprint spinnt!! Grund: unbekannt

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 06 10 2024  16:19:12      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Mikrokontrollerprint spinnt!! Grund: unbekannt

    







BID = 486076

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich
 

  


Hi

Ich habe ein kleines Problem.

Ich habe mir vor langer Zeit ein Mikrokontrollerboard von myAVR gekauft.

Wegen meinem aktuellen Projekt habe ich angefangen mit diesem Mikrokontrollerboard zu experimentieren.

Nun zu meinem Problem:

Immer wenn ich Zuhause mein Board an den Laptop anschließe und ein Bluetoothmodul anbringe spielt der Mikrokontroller verrückt. Er überträgt, über UART, anstatt eines Enter-Zeichens ein vollkommen falsches Zeichen und das Zeichen ändert sich immer wieder wenn ich das gleiche Programm neu auf das Board übertrage.

Aber: Immer wenn ich in der Schule das Board anschließe funktioniert es ohne Probleme. Immer !!!. Aber immer nur wenn ich in dem einem Laboratorium bin ansonsten nicht mehr.

Woran kann das denn bitte liegen?

Ich bedanke mich im voraus für eure Antworten.

Mfg
Rambodischien

BID = 486395

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich

 

  

Ich habe es jetzt Probiert das Board auf verschiedene Temperaturen zu bringen. Leider Fehlanzeige.

Was ich noch herausgefunden habe: Wenn ich das Enter-Zeichen durch einen Buchstabe ersetzte gibt das LCD kein falsches Zeichen mehr aus (brauche aber das Enter-Zeichen).

Habe den Enter-Befehl mit \r eingefügt.

Gibt es andere Möglichkeiten ein Enter einzufügen? (AVR-Studio)

Mfg
Rambodischien

BID = 486426

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Probier mal \n.

Das ist unter Unix und auch unter Windows das Steuerzeichen für eine neue Zeile.
kA was du genau machen willst, daher ist das mal blind ins Dunkel geraten.

Windows macht aus dem \n zwei Steuerzeichen (ich meine 0xA und 0xC), während n unter Unix ein Byte nutzt.

Edit:
Jedes beliebige Zeichen kann man auch in einen String packen, indem man die Schreibweise "\n" vorstellt:

string = "Soso\01" wird dann im Speicher als

53 6f 73 6f 01

abgelegt.


_________________


[ Diese Nachricht wurde geändert von: DonComi am 31 Dez 2007 13:37 ]

[ Diese Nachricht wurde geändert von: DonComi am 31 Dez 2007 13:39 ]

BID = 486431

Nukeman

Schriftsteller



Beiträge: 754
Wohnort: bei Kleve

Vielleicht koppelt der Bluetooth-Funk irgendwie auf den UART
ein? Du könntest mal probieren, Bluetooth ein wenig abzuschirmen,
wenn der \n-Tipp nicht hilft.

Wenn ich mein aktives Handy nahe an bestimmten Stellen vom Monitor
halte, fängt der auch an zu flippen
Andererseits sendet Bluetooth mit sehr viel weniger Energie.
Versuch macht kluch.

Gruß,
Stefan

BID = 486476

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Zitat :

blabla..
indem man die Schreibweise "n" vorstellt:

Da hat mir die Edit-Funktion die Bachslashes wegeditiert.
Sollte natürlich heißen "... indem man die Schreibweise \0 ("Backslash 0") vorstellt.


_________________

BID = 486483

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich

Danke für die Antworten.

Werde es mal mit \n probieren und das mit dem Abschirmen ist auch keine schlechte Idee.

Noch eine Frage wie kann ich in C ein Ascii-Zeichen einfach an einen String anhängen?

Mfg
Rambodischien

BID = 486496

Nukeman

Schriftsteller



Beiträge: 754
Wohnort: bei Kleve

Entweder mit strcat:
http://www.cplusplus.com/reference/clibrary/cstring/strcat.html

oder Du greifst hart auf den Speicher zu:

char cText[80]="Hallo"; // weiss nicht genau, ob der Compiler
//das so frisst

cText[5] = 0x0A; // carriage return einfügen, hier stand vorher die alte
// stringendekennung 0
cText[6] = 0x00; // Stringendekennung

Gruß,
Stefan

BID = 486513

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich

@nukeman

Danke

Ich habe das mit \n ausprobiert funktioniert leider auch nicht. ( um genau zu testen fehlt mir leider das Equipment).

Ich werde es einmal mit dem direkten also mit dem Ascii-Zeichen probieren.

Danke erstmal an euch beide, wünsche einen guten Rutsch ins neue Jahr.

Mfg
Rambodischien

BID = 486577

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Moin,

aber genau das tut das Steuerzeichen \n doch!
Schaus dir im Hexeditor an, an der Stelle, wo vorher der reguläre Ausdruck n stand, steht dann das entsprechende Steuerzeichen!

Als Beispiel sei hier mal folgender String dargestellt:

"Dies ist eine Zeichenkette,\ndie von einem Zeilenumbruch unterbrochen wird.\n"

Das sieht dann in C im Speicherabbild etwa so aus (C-Strings werden grundsätzlich mit einem \0-Zeichen terminiert):

00000000 44 69 65 73 20 69 73 74 20 65 69 6e 65 20 5a 65 |Dies ist eine Ze|
00000010 69 63 68 65 6e 6b 65 74 74 65 2c 0a 64 69 65 20 |ichenkette,.die |
00000020 76 6f 6e 20 65 69 6e 65 6d 20 5a 65 69 6c 65 6e |von einem Zeilen|
00000030 75 6d 62 72 75 63 68 20 75 6e 74 65 72 62 72 6f |umbruch unterbro|
00000040 63 68 65 6e 20 77 69 72 64 2e 00 |chen wird..|
0000004b

Edit:
Können denn sonst Werte korrekt übertragen werden?
Wenn nein, dann kann es sein, dass die UART-Einstellungen auf Rechner- und mikrocontroller-Seite nicht übereinstimmen. Das Problem kenn ich daher.
Funktioniert jedoch alles, wenn das BT-Modul nicht dran ist, dann liegts daran!


_________________


[ Diese Nachricht wurde geändert von: DonComi am 31 Dez 2007 18:57 ]

BID = 486683

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich

@DonComi

Ich weiß normalerweise sollte es mit /n funktionieren aber es geht nicht.

Zeichen kann ich korrekt übertragen nur eben der Enter-Befehl funktioniert nicht.

Im Datenblatt des Bluetoothmodules steht für Enter folgendes: 0x0A

Ich versuche jetzt einmal das in einen String umzuwandeln und anzuhängen vielleicht funktioniert es.

Mfg
Rambodischien

BID = 487165

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich

Habe es jetzt auf dem direkten Weg ausprobiert wie nukeman beschrieben hat

Jetzt kommt das gleiche Zeichen wie \n wenn ich direkt auf dem Speicher 0x0A eingebe. Ich brauche aber das \r Zeichen. Und fast immer wenn ich ein Reset mache steht wieder ein anderes Zeichen da.



Das ist zum ausflippen.

Anbei noch ein paar Fotos des LCD's.






BID = 487186

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

\r ist Carriage Return, also auf meinem System 0xD, nicht 0xA.
Probiers mal damit.

Allerdings frage ich mich, wozu. Die Displays, die ich so kenne, können mit diesen Zeichen nichts anfangen, kein Wunder, das sind ja auch Steuerzeichen...

Erkläre nochmal bitte, wofür das sein soll, das CR-Zeichen. So ganz kapiert habe ich das noch nicht, was das anstellen soll. Wenn das an eine Routine übergeben wird, die die Daten zum LCD verarbeitet, dann kann es sein, dass diese Steuerzeichen interpretiert, so mache ich das teilweise auch für meine LCDs.

_________________

BID = 487265

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich

Ich werde das mit 0x0D ausprobieren.

Ich brauche das CR um ein Bluetoothmodul anzusteuern. Ich gebe nur die ganzen Befehle zusätzlich auf dem LCD aus. Es kann sein, dass das LCD keine Steuerzeichen ausgeben kann, aber dann dürfe es auch nicht immer was anderes ausgeben oder, sondern müsste immer den gleichen Salat zeigen. Fakt ist wenn ein bestimmtes Zeichen als CR auf dem Display erscheint geht das Bluetoothmodul.

Ich versuche jetzt mal das was vom Bluetooth zurückgesendet wird auch auf das Display auszugeben.

Leider ist das nicht so einfach über UART eine Antwort des Bluetoothmoduls einzulesen ( bin Anfänger ).

Wenn ich es probiere kommt immer nur Schwachsinn heraus.



Code :

	unsigned char uart_gets( void ) 

{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) );
/* Get and return received data from buffer */
int z;
for(z=0;z<10;z++)
{
cEmpfangen[z]=UDR;
strcat(sEmpfangen,cEmpfangen);
}
return sEmpfangen;
}



Kann mir jemand helfen?

Danke

Mfg
Rambodischien

BID = 487302

Nukeman

Schriftsteller



Beiträge: 754
Wohnort: bei Kleve

Hallo Rambodischien,

hab in der Empfangsroutine noch ein mögliches Problem gesehen:
Wenn cEmpfangen nicht mit Nullen initialisiert ist, werden mit
jedem Schritt zuviele Zeichen nach sEmpfangen angehängt. Denn es
fehlt bei cEmpfangen die Stringendekennung.

Entweder Du machst so:

cEmpfangen[z]=UDR;
cEmpfangen[z+1]=0; // hier aufpassen, dass das Array immer gross genug ist
strcat(sEmpfangen,cEmpfangen);

oder machst vor der for Schleife ein
memset(cEmpfangen,0x00,sizeof(cEmpfangen));

Zu dem Sonderzeichen ans Display:
Wenn das so ein Standard-HD44780-Typ ist, werden mit Ascii-Code 00-0F
CGRAM-Zeichen aktiviert. Das sind user-definierte Zeichen, die der
User ( nämlich Du ) wahrscheinlich nicht definiert hat. Von daher
wird dann irgendwelcher Bitmüll angezeigt.
Am besten du ersetzt nicht darstellbare Zeichen in der LCD-Anzeige
durch einen Punkt und/oder hinterlegst Sonderzeichen für 0x0A und 0x0D.

Gruß
Stefan

BID = 489481

Rambodischien

Schreibmaschine

Beiträge: 1341
Wohnort: Österreich

Danke für die Antworten. Leider bin ich momentan ziemlich im Stress.
Hatte also keine Zeit um zu testen.

Wie kann ich denn ein /n durch irgendein Zeichen ersetzen?



Mfg
Rambodischien


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 182134939   Heute : 3311    Gestern : 5445    Online : 513        6.10.2024    16:19
7 Besucher in den letzten 60 Sekunden        alle 8.57 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0433948040009