Guten Tag zusammen
Ich möchte gerne ein kleines C-Programm auf den LPC913 laden (LED
blinken mit 10 LEDs). Ich benutze Keil 3 und würde gerne wissen wie ich
die Ports initalisieren soll. Meine Idee wäre ca. so:
#include <reg913.h>
int main(void)
{
P0M2 = 0xFF; // setzt P0 zu open-drain
P1M2 = 0xD3; // setzt P1 zu open-drain
P2M2 = 0xFF; // setzt P2 zu open-drain
P3M2 = 0x03; // setzt P3 zu open-drain
while (1) {
}
}
Wie geht das nun genau? Ich weiss das das nicht so schwierig ist, aber
ich verzweifle an diesen Ports, weil ich aus dem Datenblatt nicht schlau
werde :D
Ich hoffe ihr könnt mir helfen :D
Lg
Ja klar das habe ich ja auch gemacht.
Ein Zufallsgenerator soll eine Zahl zwischen 0-1024 anzeigen und 500 ms
warten bis der nächste Wert angezeigt wird.
Meine Frage bezieht sich auf das Initaliesieren und definieren der
Ports, da ich gerne alle Ports auf open drain setzen würde und 1.5
(Reset) und 1.0 (TxD) nicht beachten möchte.
Wie mache ich das am Besten?
Moin moin,
> Ein Zufallsgenerator soll eine Zahl zwischen 0-1024
Geht mit 10 LEDs nicht.
> Meine Frage bezieht sich auf das Initaliesieren und definieren der Ports,> da ich gerne alle Ports auf open drain setzen würde ...> Wie mache ich das am Besten?
In dem du uns nicht nachfragen lässt, wie die LEDs mit dem Controller
verbunden sind (H/L-aktiv), einen Link auf's Datenblatt gibst und
beschreibst, an welcher Stelle des Datenblatts dein Verständnis klemmt
:)
Und bitte nicht einfach sagen, ich versteh's nicht, sondern WAS du nicht
verstehst.
Ralf
Ralf schrieb:> Moin moin,>>> Ein Zufallsgenerator soll eine Zahl zwischen 0-1024> Geht mit 10 LEDs nicht.
Klar geht das : 2^10 Zustände
> In dem du uns nicht nachfragen lässt, wie die LEDs mit dem Controller> verbunden sind (H/L-aktiv), einen Link auf's Datenblatt gibst und> beschreibst, an welcher Stelle des Datenblatts dein Verständnis klemmt> :)> Und bitte nicht einfach sagen, ich versteh's nicht, sondern WAS du nicht> verstehst.>> Ralf
Datenblatt wäre
http://www.nxp.com/documents/data_sheet/P89LPC912_913_914.pdf
und ich wollte eigentlich auf jeden Port ein LED setzen ausser auf 1.5
(da input only) und auf 1.0. Ausserdem programmiere ich mit Keil und in
der Headerdatei sind ja die Ports definiert. Wenn ich jetzt diese Ports
wieder global definiere kommt ein Fehler. Ich muss sie ja zuerst auf
open drain oder quasi bidirectional schalten und danach muss ich ja eine
Ausgabe an die LEDs senden. Aber wie? :D
Vielen Dank für eure Hilfe
John G.
John G. schrieb:>>> Ein Zufallsgenerator soll eine Zahl zwischen 0-1024>> Geht mit 10 LEDs nicht.>> Klar geht das : 2^10 Zustände
Stimmt.
"dazwischen" sind ja nur 1 .. 1023.
Hätte er "von bis" gesagt, dann paßts nicht mehr.
Peter
John G. schrieb:> Ich muss sie ja zuerst auf> open drain oder quasi bidirectional schalten und danach muss ich ja eine> Ausgabe an die LEDs senden. Aber wie? :D
Du denkst zu monolitisch. Du mußt das Problem in einzelne Aufgaben
aufteilen.
Fange erstmal mit einer Blink-LED an.
Ports und Konfigurationsregister sind auch nur Variablen.
Wie man in einer Variable einzelne Bits ändert, steht z.B. hier:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=37871&start=all&postdays=0&postorder=asc
Peter
Peter Dannegger schrieb:>> Klar geht das : 2^10 Zustände>> Stimmt.> "dazwischen" sind ja nur 1 .. 1023.> Hätte er "von bis" gesagt, dann paßts nicht mehr.>>> Peter
sry meinte natürlich 512 Zustände. Alle dazwischen auch. So kann ich mit
den LEDs eigentlich jede beliebige Zahl zwischen 0 und 512 darstellen.
Eigentlich eine binäre Anzeige mit den LEDs einfach mit
zufallsgenerierten Zahlen
Peter Dannegger schrieb:> John G. schrieb:>> Ich muss sie ja zuerst auf>> open drain oder quasi bidirectional schalten und danach muss ich ja eine>> Ausgabe an die LEDs senden. Aber wie? :D>> Du denkst zu monolitisch. Du mußt das Problem in einzelne Aufgaben> aufteilen.>> Fange erstmal mit einer Blink-LED an.> Ports und Konfigurationsregister sind auch nur Variablen.> Wie man in einer Variable einzelne Bits ändert, steht z.B. hier:> http://www.avrfreaks.net/index.php?name=PNphpBB2&f...>>> Peter
Ja ok ich fange mal mit den Blink LEDs an. Aber wie setze ich die I/O's
auf quasi-bidirectional?
einfach mit folgenden Befehlen?
P0M1 = 0; // setzt P0 zu quasi-bidirectional
P0M2 = 0; // setzt P0 zu quasi-bidirectional
P1M1 = 0; // setzt P1 zu quasi-bidirectional
P1M2 = 0; // setzt P1 zu quasi-bidirectional
P2M1 = 0; // setzt P2 zu quasi-bidirectional
P2M2 = 0; // setzt P2 zu quasi-bidirectional
P3M1 = 0; // setzt P3 zu quasi-bidirectional
P3M2 = 0; // setzt P3 zu quasi-bidirectional
Dann schreit der Compiler, dass er die Namen nicht überschreiben kann,
da sie im Header definiert sind.
Vielen Dank für eure Hilfe
John G.
John G. schrieb:> Dann schreit der Compiler, dass er die Namen nicht überschreiben kann,> da sie im Header definiert sind.
Der Compiler sagt Dir also:
"error in blah.c, line 123: ich schreie"
Du mußt schon den exakten Wortlaut der 1. Fehlermeldung posten
(copy&paste)!
Und das C-File als Anhang, damit man die Zeilennummer zuordnen kann.
Peter
so jetzt bin ich ein Stück weiter. Das File sieht so aus:
/*----------------------------------------------------------------------
--------
Blinklicht
------------------------------------------------------------------------
------*/
#include <reg913.h>
#include <stdlib.h>
#define F_CPU 1000000UL // 1 MHz
P0M1^6 = 0;
P0M1^5 = 0;
P0M1^4 = 0;
P0M1^2 = 0;
P0M2^6 = 0; // setzt P0.6 zu quasi-bidirectional
P0M2^5 = 0; // setzt P0.5 zu quasi-bidirectional
P0M2^4 = 0; // setzt P0.4 zu quasi-bidirectional
P0M2^2 = 0; // setzt P0.2 zu quasi-bidirectional
P1M1^0 = 0;
P1M1^1 = 0;
P1M2^0 = 0; // setzt P1.0 zu quasi-bidirectional
P1M2^1 = 0; // setzt P1.1 zu quasi-bidirectional
P2M1^5 = 0;
P2M1^3 = 0;
P2M1^2 = 0;
P2M2^5 = 0; // setzt P2.5 zu quasi-bidirectional
P2M2^3 = 0; // setzt P2.3 zu quasi-bidirectional
P2M2^2 = 0; // setzt P2.2 zu quasi-bidirectional
P3M1^1 = 0;
P3M1^0 = 0;
P3M2^1 = 0; // setzt P3.1 zu quasi-bidirectional
P3M2^0 = 0; // setzt P3.0 zu quasi-bidirectional
int main(void)
{
while (1) {
}
}
0 Fehler bei der Bezeichnung. Kann man es so nun machen? Wie kann ich
nun alle Ausgänge zusammennehmen? Denn es gibt ja zwei "modes". Muss ich
nun Mode 1 oder Mode 2 oder einfach:
allLEDs = P0^2 & P0^4 usw. schreiben?
Peter Dannegger schrieb:>>>> Ein Zufallsgenerator soll eine Zahl zwischen 0-1024>>> Geht mit 10 LEDs nicht.>>>> Klar geht das : 2^10 Zustände>> Stimmt.> "dazwischen" sind ja nur 1 .. 1023.> Hätte er "von bis" gesagt, dann paßts nicht mehr.
oO Du willst es wirklich so weit runterbrechen? =)
Okay, bitte sehr: Wenn einer "zwischen" und "bis" (angedeutet durch den
Bindestrich) in einem Satz schreibt, zusammen mit einer Angabe, wieviele
Werte er darstellen will und wieviele binäre Anzeigeeinheiten er hat,
dann geh ich wie sonst auch in der Elektronik erstmal vorsichtshalber
vom WorstCase aus, und das heisst ich weise darauf hin, dass es nicht
passt ;)
> Dann schreit der Compiler, dass er die Namen nicht überschreiben kann,> da sie im Header definiert sind.
Dann behaupte ich, die gezeigten Codezeilen sind NICHT die
fehlerverursachenden, sondern die liegen irgendwo weiter oben.
Wie Peter geschrieben hat, poste mal die komplette Fehlermeldung, und
auch den bisherigen Code.
Ralf
Ein MC ist kein FPGA. Du kannst daher keine Drähte ziehen zwischen den
Variablen.
Du mußt jedesmal die eine Variable in die andere kopieren, wenn sie sich
ändern soll.
Und wenn Du nur einzelne Bits kopieren willst, geht das nur so, wie hier
beschrieben:
Beitrag "Re: LPC913 in C Ports definieren"
Peter
Seit wann ist es denn in C erlaubt, dass man ausführbare Anweisungen
ausserhalb von Funktionen hat?
Du musst schon nach den C-Regeln spielen! Wenn du die nicht kennst, dann
kauf dir erst mal ein C-Buch und eigne dir Grundkentnisse in C an.