Hallo Mikrocontroller Gurus!
Ich verzweifle dabei einen Phillips (oder NXP) P89LPC901 in Betrieb zu
nehmen. Ich habe schon alle Tricks versucht aber ich bekomme keine
Ausgabe auf den Ports 0 und 1 hin. Auf Port 3 jedoch klappt es.
Dieses Programm erzeugt tatsächlich die gewünschte Ausgabe auf Port 3:
1
000000$ioP89LPC901.h
2
000000$bitdef_asm.h
3
000000
4
000000org0x00
5
00000075B100main:movP3M1,#0x00
6
00000375B203movP3M2,#0x03
7
00000675B000loop:movP3,#0x00
8
000009D9FEdelay1:djnzR1,delay1
9
00000B75B003movP3,#0x03
10
00000ED9FEdelay2:djnzR1,delay2
11
0000100106ajmploop
12
000012
Im Gegensatz dazu kommt bei folgenden Programmen gar nix raus:
1
000000$ioP89LPC901.h
2
000000$bitdef_asm.h
3
000000
4
000000org0x00
5
000000758400main:movP0M1,#0x00
6
000003758530movP0M2,#0x30
7
000006758000loop:movP0,#0x00
8
000009D9FEdelay1:djnzR1,delay1
9
00000B758030movP0,#0x30
10
00000ED9FEdelay2:djnzR1,delay2
11
0000100106ajmploop
12
000012
..auch auf Port 1 kommt kein Lebenszeichen:
1
000000$ioP89LPC901.h
2
000000$bitdef_asm.h
3
000000
4
000000org0x00
5
000000759100main:movP1M1,#0x00
6
000003759204movP1M2,#0x04
7
000006759000loop:movP1,#0x00
8
000009D9FEdelay1:djnzR1,delay1
9
00000B759004movP1,#0x04
10
00000ED9FEdelay2:djnzR1,delay2
11
0000100106ajmploop
12
000012
Geprüft habe ich mit Oszilloskop und mit (und auch ohne) Pull-up
Widerstände. Ich habe auch einen zweiten Chip in die Spur geschickt für
den Fall, daß es ein Defekt sein könnte - leider ohne Ergebnis.
Port 0 teilt sich die Funktion mit dem Comparator. Laut Usermanual ist
der aber nach dem Einschalten nicht aktiv. (Ich habe auch versucht den
Comparator auszuschalten - kein Erfolg)
Auf dem Anschluß von Port 1 liegen noch Reset (input only) und T0. Die
T0 Ausgabe müßte aber nach dem Einschalten auch inaktiv sein.
Weiterhin habe ich es nicht geschafft den internen Takt/2 auf dem Port
3.0 auszugeben. Das ENCLK Bit im TRIM Register scheint keine Auswirkung
zu haben.
Leider ist die Dokumentation von NXP ziemlich spärlich und an einigen
Stellen auch noch falsch...
Ich hoffe Ihr habt schon einmal einen solchen Chip zur Mitarbeit
überredet. Mir sind nämlich schon vor Tagen die Ideen ausgegangen.. :(
Vielen lieben Dank!
Martin
Also ich kann dir einen Tip bezüglich Port1 geben, da ich selber mal vor
einem solchen Problem stand. Es ging dabei zwar um einen LPC936, aber
der interne Aufbau der Ports ist identisch zum LPC901.
Du hast ja nur P1.2 und P1.5 von Port1 zur Verfügung. P1.5 ist input
only und kann deshalb nicht als Ausgabe Pin benutzt werden. Und P1.2
besitzt die Besonderheit, daß dieser Pin nur im Input oder Open-Drain
Modus funktioniert. Push-Pull und Quasi-Bidirectional werden nicht
unterstützt.
Leider steht dieser Hinweis nicht im LPC901 aber im LPC936 Datenblatt.
Wegen den beiden Pins von Port0 steht diesbezüglich zwar nichts drin,
aber ich würde einfach mal den Ausgangsmodus von Push-Pull auf
Quais-Bidirectional oder Open-Drain umstellen.
Ciao,
Rainer
Hallo Rainer!
Vielen Dank für die Antwort!
Nach vielen weiteren Stunden habe ich nun doch noch das
(selbstverschuldete) Problem gelöst: es lag an der Programmer-Software.
**sehr-peinlich**
Das Programm war korrekt - kam aber leider nie so beim Chip an. Der
Fehler blieb unerkannt, da ich den LPC901 nicht auslesen kann. Die
berechnete CRC Prüfsumme schien zu stimmen - aber da die HEX-Datei schon
falsch eingelesen wurde, war das in Wahrheit nur die Bestätigung, daß
der Datenmüll richtig geflasht wurde.
Ich möchte mich daher bei allen entschuldigen, deren Zeit ich
verschwendet habe. :(
Leider war nirgendwo im weiten Internet ein kleines Beispielprogramm mit
der dazugehörigen richtigen CRC zu finden. Darum möchte ich das hier
nachholen:
gelernte Lektionen:
1. eine (richtige?) Prüfsumme muß nicht bedeuten, daß alles nach Plan
verlaufen ist
2. Unicode-Funktionen und herkömmlige Funktionen zu mischen ist eine
ganz dumme Idee :(
lg
Martin
Das heißt, P1.2 funktioniert bei dem LPC901 im Push-Pull Modus?
Falls ja, dann bezieht sich das von mir beschriebene Problem wohl erst
auf die größeren LPC Versionen. Denn bei diesen bekommt der Pin
zusätzlich die Funktion des I2C Busses mit auferlegt.
Ciao,
Rainer
Ja, anders als bei den großen Brüdern können beim 901 alle Anschlüsse
(außer dem Reset) als Push-Pull arbeiten.
Ich hatte mir in meiner Verzweiflung auf deinen Hinweis hin ja auch die
User Manual zu den größeren P89LPC933/934/935/936 angesehen. Dort gibt
es extra den Hinweis:
• Pin P1.5 is input only. Pins P1.2 and P1.3 are configurable for either
input-only or open drain.
Ansonsten hilft diese Manual sehr beim Verständnis von einigen Dingen,
die in der anderen Anleitung zu kurz kommen. Leider scheint ja die vom
LPC901/2/3 irgendwie nicht mehr gepflegt zu werden...
Falls es hier im Forum mal eine Abteilung für die 8-Bit LPC gibt kann
ich ja meinen improvisierten ICP Programmer nebst Software verfügbar
machen.
Martin wrote:
> Ja, anders als bei den großen Brüdern können beim 901 alle Anschlüsse> (außer dem Reset) als Push-Pull arbeiten.
Das klingt gut. Ich habe nämlich auch noch einen LPC901 hier in der
Schublade, den ich bisher nur noch nicht benutzt habe.
> Falls es hier im Forum mal eine Abteilung für die 8-Bit LPC gibt kann> ich ja meinen improvisierten ICP Programmer nebst Software verfügbar> machen.
Also ich hätte schon Interesse dadran.
Momentan verwende ich ISP bei den größeren LPC900 oder ICP per Adapter
mit meinem Galep4. Ein einfacher ICP Adapter (ohne extra Galep4 zu
benutzen) wäre mir ansich aber lieber, falls ich mal ICP benötige.
Vielleicht kannst du ja den Schaltplan samt Software hier im Beitrag
online stellen.
Ciao,
Rainer
Ich werde dazu nächste Woche einen neuen Thread eröffnen. Das Thema hier
ist ja abgeschlossen.
Folgende Nachteile hat meine Lösung:
- benötigt eine serielle Schnittstelle am Computer
( mit USB->Seriell Adapter funktioniert es auch - aber laaaaaaangsam..
CRC über das eine kB des 901 dauert 20 Sekunden!
Bei einer richtigen seriellen Schnittstelle nur 1 Sekunde!
Das ist aber auch die Aktion, die am längsten dauert. )
- ist noch unvollständig und die Oberfläche ist mangelhaft:
> keine Einstellung für UCFG2,
> Sector Protection nur für die ersten vier Sektoren
( der 901 hat ja nur vier ),
> fehlende Auswahl des Sektors bei Aktionen für einzelne Sektoren
- Stromversorgung über die serielle Schnittstelle ( wird bei größeren
Chips oder Chips in einer Schaltung zum Problem - könnte man aber
sicher ändern
- Schaltung ist noch nicht optimal durchdacht - es war viel mehr nur
eine "quick-and-dirty" Lösung um meinen bereits vorhandenen
Tiny-11 Programmer zu zweckentfremden
- Dokumentation ist noch nicht existent
( außer den Kommentaren im Quelltext )
- ist grausamer Weise in Visual Basic geschrieben ^^
Es gibt aber auch Vorteile:
- ist in Visual Basic geschrieben ( Quelltext wird dabei sein )
=> jeder kann seine benötigten Änderungen sofort selber realisieren
- einfacher Aufbau mit nur einer Hand voll Transistoren und
Widerständen
=> es werden keine vorprogrammierten Bausteine benötigt ( wie bei ISP
)
Ein Screenshot befindet sich im Anhang an diesen Beitrag.
Ich hatte noch keine Zeit ein Layout oder einen Schaltplan zu zeichnen
und dieses dann auch noch zu testen. Wer sich die Sache trotzdem schon
anschauen oder ausprobieren ( und eine Doku schreiben g ) möchte, der
kann mich anschreiben. Adresse sieht man im Fenstertitel auf dem
Screenshot. ;)
Bis demnächst!
Martin
>Also ich hätte schon Interesse dadran.>Momentan verwende ich ISP bei den größeren LPC900 oder ICP per Adapter>mit meinem Galep4. Ein einfacher ICP Adapter (ohne extra Galep4 zu>benutzen) wäre mir ansich aber lieber, falls ich mal ICP benötige.
Das geht mit einer ICP Bridge und den MBC900 Board von Keil. (Kann man
auch nachbauen, Schaltplan bei Keil verfügbar, das Hex-File findet man
auch). FlashMagic unterstützt dann diese Kombination.
Matthias wrote:
> Das geht mit einer ICP Bridge und den MBC900 Board von Keil. (Kann man> auch nachbauen, Schaltplan bei Keil verfügbar, das Hex-File findet man> auch). FlashMagic unterstützt dann diese Kombination.
Diese Lösung hatte ich auch schon gefunden gehabt. Aber extra ein MCB900
Board dafür erst aufbauen zu müssen finde ich etwas aufwendig.
Andererseits werde ich mir den Schaltplan des MCB900 mal anschauen, denn
vielleicht kann ich mein selbst gebautes LPC935 Board anstatt des MCB900
mit der ICP-Bridge Firmware von Keil dafür auch benutzen. :)
Ciao,
Rainer
>Andererseits werde ich mir den Schaltplan des MCB900 mal anschauen, denn>vielleicht kann ich mein selbst gebautes LPC935 Board anstatt des MCB900>mit der ICP-Bridge Firmware von Keil dafür auch benutzen. :)
Kannst auch ein selber gebautes Board mit LPC932 oder ähnlichen (Es muss
ein LPC mit Bootloader sein, ab LPC920 glaub ich...) nutzen. Ist
praktisch nur der µC und das COM-Interface erforderlich. Das hat den
Vorteil, das Du FlashMagic weiter nutzen kannst. Wenn man direkt das
ICP-Interface (SPI-ähnlich) der kleinen LPCs ansprechen will, braucht es
sonst einer eigenen PC-Programmiersoftware.