mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik probleme mit seriellem interrupt


Autor: humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo!,

also ich bin gerade dabei für die schule ein projekt zu machen und zwar 
arbeite ich mit Keil microvision 3 und einem humerboard 
(http://www.humerboard.at/) und programmiere in der Sprache c.

rauskommen soll bei dem ganzen eine wetterstation. am demoboard wird 
temperatur, luftdruck usw. eingelesen und dann alle 10sec über eine 
serielle schnittstelle an einen PC gesendet und dort in einem java 
programm gespeichert. mit diesem java programm wird auch die messung 
gestartet indem der Buchstabe 'T' über die serielle schnittstelle an das 
demoboard gesendet wird und im c programm wird ein serieller interrupt 
ausgelöst. und genau da liegt das problem aus irgendeinem grund 
funktioniert das nicht.

daher meine frage was muss beim seriellen interrupt alles initialisiert 
werden an special funktuion registern? und hat der interrupt eine 
spezielle nummer?

mein derzeitiger code:
void SerISR(void) interrupt 16
{

  recflag=1;

   if(S1CON==0x01)
    {
       c=S1BUF;
       S1CON&=0xFE;
    }
}

würde mich sehr freuen wenn mir jemand weiterhelfen kann.

mit freundlich grüßen,
humer

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, was erwartest Du mit sonem lieblos dahingeworfenen Codeschnipsel 
ohne Kommentare?
Du mußt schon sagen, was Du Dir dabei gedacht hast.

Hast Du überhaupt mal im Datenblatt/Manual den Abschnitt UART gelesen?

Aber zuerst mal, hellsehen kann hier niemand.
Was für nen MC (genaue Bezeichnung) verwendest Du?


Tip:
Meistens will man in nem Register nur ein Bit prüfen, dann geht es 
schief, wenn man das ganze Byte testet.
Oftmals gibts deshalb sogar Bitvariablen (Deine Compiler-Manual gibt 
darüber Auskunft).


Peter

Autor: Humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum nicht die einfache Funktion printf() verwenden?
#include <reg?????>
#include <stdio.h>
..
...
idata float temperatur;
idata int luftdruck;

main()
{ // Hier die Baudrate einstellen lt. Datenblatt
  while(1)
  {

   printf("T %5.2f %4d ... \n",temperatur,luftdruck);



  }

}
// natürlich müssen die Sensordaten erst ermittelt werden.
// sehen Sie auch unter humerboard.at - Anwendungen nach..

Autor: humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die antworten!

inzwischen lauft auch schon alles prima. sensorik, interrupts, 
übertragung von und zum pc usw.

allerdings ein problem hab ich noch und zwar wird derzeit die 
displayanzeige
über einen timer akutalisiert (100ms) und daher blinkt das ganze. wie 
kann ich das machen das es nicht blink aber dafür flüssig die messwerte 
aktualisiert werden?

vl. noch ein paar infos zum system: humerboard mit infineon SAB 80c517a 
und ein 20x2 lcd display.

mit freundlichen grüßen

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ humer (Gast)

>über einen timer akutalisiert (100ms) und daher blinkt das ganze.

Wahrscheinlich löschst du erst das LCD komplett und schreibst es dann 
neu. Lass das Löschen weg und überschreib es nur neu.

MFG
Falk

Autor: humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, funktioniert jetzt einwandfrei.

allerdings ist noch ein anderes problem aufgetreten und zwar beim senden 
des Strings an den PC stimmen plötzlich die 2 letzten messwerte nicht 
mehr, obwohl sie am display richtig angezeigt werden.

float temp2, wind, druck, feucht;
xdata unsigned char ausgabe[25];

sprintf(ausgabe,"%3.2f#%3.2f#%3.2f#%3d", temp2, wind, druck, feucht);
              
sendString(ausgabe);

statt diesem String z.B 24,66#5,50#1,01#78 kommt dann sowas wie: 
24,66#5,50#-0,5#11480 am pc an.
interessant ist das immer nur die letzten beiden messwerte flasch sind, 
also wenn ich die reihenfolge vertausche passt der Wert der vorher 
Falsch war, dafür der andere der Richtig war nimmer. Hab zuerst gedacht 
das Feld ist zu klein aber auch mit einem größeren Feld kommt der selbe 
mist raus. hat vl. irgendwer eine ahnung woran das liegen könnte?

vielen dank grüße,
humer

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stackprobleme? Wieviel SRAM ist in dem Projekt noch frei?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
float temp2, wind, druck, feucht;
xdata unsigned char ausgabe[25];

sprintf(ausgabe,"%3.2f#%3.2f#%3.2f#%3d", temp2, wind, druck, feucht);

Das vierte Argument von sprintf ist vom Typ float, sprintf erwartet aber 
einen int, weil Du es mit %3d dazu instruierst. Wenn Du float ohne 
Nachkommastellen ausgeben willst, musst Du %3.0f als Formatstring 
verwenden.

Autor: humer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ui, sorry. da hab mich wohl beim kopieren etwas vertan. feucht ist 
natürlich als integer deklariert.

@ falk brunner: auf gefahr hin mich zu blamieren, wo kann ich das nach 
sehen wie viel SRAM noch verfügbar ist (Keil Microvision 3.0)?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@humer (Gast)

>@ falk brunner: auf gefahr hin mich zu blamieren, wo kann ich das nach
>sehen wie viel SRAM noch verfügbar ist (Keil Microvision 3.0)?

Keine Ahnung, ich arbeite nur mit dem WINAVR.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.