Hallo allerseits.
Ich und ein Kommilitone müssen als Projekt für die Hochschule einen
Microcontroller an einen CAN-Netzwerk anschließen und die Daten
"mitlauschen" und über die serielle Schnittstelle an einen PC schicken.
Mein Problem dabei ist, dass das mit der seriellen Schnittstelle nicht
ordentlich funktioniert. Ich denke es hat etwas mit der Baudrate zutun,
weil wenn ich 26 (war in einem Beispielprojekt vom Herrsteller
angegeben) nehme bekomme ich 0xFE auf die Console. Wenn ich 19200 oder
19200 & 0x1fff nehme (wiederum in anderem Beispielprojekt) bekomme ich
00 00 00 auf die Console. Dabei spielt es keine Rolle was für Zeichen
oder Zahl ich auf die Leitung der seriellen Schnittstelle lege. Baudrate
ist auf der Console auf 19200 Baud gestellt.
Mein Controllermodule: MC9S12DP512 (CardS12.DP512)
Unser Code bis jetzt:
1
#ifndef __CARDS12_LED_H
2
#define __CARDS12_LED_H
3
4
#include<mc9s12dp512.h>
5
#include"s12_crg.h"
6
7
/* Macros */
8
#define initLED() DDRH |= 0x80
9
#define offLED() DDRH |= 0x80
10
#define onLED() DDRH &= ~0x80
11
#define toggleLED() DDRH ^= 0x80
12
13
/* Functions */
14
15
/* this func is called by the Startup Code: */
16
void_HC12Setup(void){
17
}
18
19
20
/* redirect all output by declaring a custom putchar() func
21
(the following function declaration takes precedence over the
Ehrlich gesagt weiß ich nicht was Du mit Quarz meinst. Bin blutiger
Anfänger.
Aus diesem Dokument
http://elmicro.com/files/elmicro/cards12v110_manual_de.pdf konnte ich
entnehmen dass der Quarztakt 16 MHz beträgt und einmal steht da noch Q1.
Ich denke diese Q1 ist das was Du meinst, sicher bin ich mir aber
nicht...
Hier ist die Webseite, die Informationen über den Controller enthält:
http://elmicro.com/de/cards12.html
Der CardS12.DP512 ist meiner.
Ich kann in Starprog(Programm zum rüberladen auf
µController)-Einstellungen zwischen default, 8, 4, 2 und 1 MHz wählen.
Würde es was bringen wenn ich da auf 8 MHz begrenze?
Weißt Du zufällig wie diese 26 zustande kommt?
Im Starprog kannst du NICHT den Takt einstellen, mit welchem der
Controller laufen soll. Dieser wird alleine durch den angeschlossenen
Quarz (bzw. Resonator) bestimmt. Die einstellung der PLL ist übrigens
bedeutungslos, da der Takt des CAN-Moduls aus dem Bustakt gewonnen wird.
Finde zuerst heraus, mit welchem Takt dein Board läuft.
Ich wüsste jetzt nicht wie ich auf das Monitorprogramm direkt zugreifen
sollte, aber auf der mitgelieferten CD gibt es das Monitorprogramm zum
reinladen in den Flash. Das habe ich eben reingeladen und bekomme
Version und Copyright-Text raus etc.
Von dem CAN-Modul bin ich noch weit entfernt, ich versuche gerade die
serielle Schnittstelle zum laufen zu bringen. CAN-Netzwerk hat ne
Baudrate von 115200
Bis jetzt habe ich also nur versucht irgendwelche Zeichen
(Buchstaben/Zahlen) auf der Console zu zeigen, was mit misslingt...
@rufus
16.000M
also sind es 16 MHz
Es wäre interessant, was initPLL(); macht, da die SCI Clock
von der Busclock =(Core oder PLL/2) abgeleitet ist:
> SCI BR register = BusFreq/16/baudrate
Die CardS12 hat normal eine 16Mhz Quarz, wie es im Schaltplan steht.
Ich habe jetzt laut der Tabelle
http://alt.kreatives-chaos.com/index.php?seite=baud den UBRR Wert 51 für
meine Baudrate und Taktfrequenz entnommen. Das Ergebnis:
die vorinitialisierte Variable i wird falsch übertragen. Wenn ich dann
über die Console Zeichen einspeise - bekomme ich diese zurück, was mich
durchaus freut! Allerdings bekomme ich recht häufig fehler...
Write data: 62 b
Read data: 62 b
Write data: 63 c
Read data: 63 c
Write data: 64 d
Read data: 64 d
Write data: 65 e
Read data: 65 e
Write data: 66 f
Read data: e6 æ
Write data: 67 g
Read data: 67 g
Write data: 66 f
Read data: 66 f
Write data: 67 g
Read data: 67 g
Write data: 68 h
Read data: e8 è
Write data: 68 h
Read data: e8 è
Write data: 68 h
Read data: e8 è
Write data: 69 i
Read data: 69 i
Write data: 68 h
Kleiner Ausschnitt aus meiner Disskussion mit dem µController.
Verursacht diese 0,2%ige Abweichung die Fehler?
Nikolai Sch. schrieb:> Ich und ein Kommilitone müssen als Projekt für die Hochschule einen> Microcontroller an einen CAN-Netzwerk anschließen und die Daten> "mitlauschen" und über die serielle Schnittstelle an einen PC schicken.
Lass mich raten, Hochschule Esslingen? Nur die verwenden dieses... aehm,
Monster ;-)
Gruß,
Atmi
Danke an alle!
@Karl
mit 78 läuft alles TipTop! Wo hast du die Werte her? Kann man die
irgendwie berechnen? Warum passten die aus dem oberen Link nicht?
@Atmi
ne, gut 500km nördlicher :)
> ...> #define S12_PLLCLK 48000000 // desired output frequency of PLL
Wir haben laut deinem Code 48 MHz PLL clock, daraus folgt 24 MHz
Bustakt.
Eingesetzt in die Formel:
24000000/16/19200 = 78
Steht übrigens alles im Reference Manual der MCU, Sektionen CRG & SCI.
;-)
> mit 78 läuft alles TipTop! Wo hast du die Werte her? Kann man die> irgendwie berechnen?
Im Datenblatt deines Prozessors gibt es sicher irgendwo eine Seite die
dir zeigt wie man das genau berechnet.
Was mich aber immer wieder fasziniert, wie kann man auf die Idee kommen
eine Aufgaben fuer einem einen noch unbekannten Prozessor loesen zu
wollen ohne das man sich zuallerst mal das Datenblatt besorgt und
liesst?
Olaf
Eine eigene Frage?
Dieser Thread ist über 15 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.