Forum: Mikrocontroller und Digitale Elektronik LPC810 seriell programmieren


von chris_ (Gast)


Lesenswert?

Hallo Zusammen,

Mein LPC810 lässt sich nicht mehr programmieren.

Im Moment interessiere ich mich für den LPC810:
http://vilaca.eu/lpc810/

und verwende folgendes Board:
http://www.lpcware.com/lpc800-mini-kit

Dort habe ich via seriellem Adapter und Flashmagic ein kleines 
Testprogramm aus einem GitHub Directory geladen ( 
LPC810_HelloWorld_UART0_115K.hex ), welches Zeichen auf der seriellen 
Schnittstelle ausgibt:

https://github.com/microbuilder/LPC810_CodeBase/blob/master/tools/

Hello World funktioniert wunderbar, aber leider kann ich den LPC810 
jetzt nicht mehr flashen. Hat jemand eine Idee?

Wenn ich die Resettaste drücke, sendet der Controller das "Hello, 
LPC810!" ziemlich unbeeindruckt weiter. Ich habe den Pegel am Reset Pin 
nachgemssen, das Tastensignal kommt am Controller an.

Woran könnte es liegen?

von Stefan (Gast)


Lesenswert?

Hast du die ISP Taste gedrückt während des Resets? Also ISP drücken, 
Reset antippen und erst dann ISP wieder loslassen.
Beim ersten Mal brauchst du das nicht machen, sobald aber ein Programm 
drauf ist schon.

von chris_ (Gast)


Lesenswert?

>Hast du die ISP Taste gedrückt während des Resets?

Ja, das habe ich so gemacht. Ich nehme an, dass der LPC810 dann aufhören 
sollte sein "Hello .." zu senden und der Bootloader auf Eingaben wartet. 
Das macht er aber nicht.

Als USB-Serial Wandler habe ich einen alten Arduino Diecimla
http://www.arduino.cc/en/uploads/Main/Arduino-Diecimila-schematic.pdf
genommen, den Prozessor rausgezogen und den Sendepegel mittels 
Widerstand auf 3V runtergeteilt, damit sich der LPC nicht an den 5V 
verschluckt.

Als Funktionsbeweis konnte ich den Prozessor einmal programmieren und 
jetzt sendet er sein "Hello, LPC810".

Ich habe mir ein paar LPC810 bestellt, die hoffentlich heute kommen, 
dann werde ich den alten mal auslöten.

Laut Datenblatt gibt es ein Konigurationsbit für den Reset-Pin:
1
 RESET_EN
2
Enables fixed-pin function. 
3
Writing a 1 deselects the function and any movable function can be assigned to this pin. 
4
This function is selected by default

Könnte es vielleicht sein, dass das HEX-File den Reset-Pin lahm legt?

von chris_ (Gast)


Lesenswert?

Stefan schrieb:
>Hast du die ISP Taste gedrückt während des Resets?

Hast Du Erfahrung mit dem LPC810? Ich versuche gerade im Code
https://github.com/microbuilder/LPC810_CodeBase
die Prozessorinitialisierung zu finden, um heraus zu kriegen, ob er 
vielleicht den Reset Pin umkonfiguriert.

von chris_ (Gast)


Lesenswert?

So, jetzt sind die neuen LPC810 von Farnell eingetroffen.

Jetzt verhält es sich folgendermaßen:
Das Blink-Programm  LPC810_Blinky_0_2.hex von
https://github.com/microbuilder/LPC810_CodeBase/tree/master/tools
kann ich mehrmals flashen und wieder löschen.

Nachdem ich aber das Programm  LPC810_HelloWorld_UART0_115K.hex geflasht 
habe, geht das flashen nicht mehr.

Für das Blinky-Programm ist im Git-Repository der Eintrag: "Fixed Reset 
Isue". Wahrscheinlich hat er den Fehler für das Blinky-Programm behoben, 
nicht aber für das Hello-World.
1
Resume:
2
Wird der Reset falsch konfiguriert, geht der serielle Bootloader nicht mehr.

Frage: Gibt es eine Möglichkeit, den Baustein in den Urzustand zurück zu 
versetzen?

von noreply (Gast)


Lesenswert?

chris_ schrieb:
> Frage: Gibt es eine Möglichkeit, den Baustein in den Urzustand zurück zu
> versetzen?

Ist jetzt mal blanke Spekulation. Ich würde über ein LPCXpresso 
versuchen, den Baustein über JTAG anzusprechen. Schaltpläne der 
LPCXpresso sind irgendwo im Downloadcenter von * enthalten. Da kann man 
die Schnittstelle einsehen bzw. nachbauen.

von emp (Gast)


Lesenswert?

moin.
mein vorschlag:

Strom aus
ISP druecken
Strom an
Flashen

Der Bootloader wird auch beim Poweron Reset abgearbeitet

von chris_ (Gast)


Lesenswert?

>Ist jetzt mal blanke Spekulation. Ich würde über ein LPCXpresso
>versuchen, den Baustein über JTAG anzusprechen.

Hmm .. dazu müsste ich ein wenig löten. Mal sehen ...
Der JTAG Anschluss belegt so ziemlich alle Pins des LPC810. Der 
Reset-Pin ist auch dabei. Aber vielleicht geht es ja trotzdem.

>mein vorschlag:
>
>Strom aus
>ISP druecken
>Strom an
>Flashen

Das habe ich auch schon probiert. Scheinbar geht er auch in den 
Bootloader-Modus, weil er dann nicht mehr sendet. Aber programmieren 
kann ich ihn nicht.
Meine Vermutung: beim Einschalten der Versorgungsspannung verhaspelt 
sich irgendwie die Baud-Rate-Autodetection. Das kann ich aber leider 
nicht verifizieren.

von chris_ (Gast)


Lesenswert?

>mein vorschlag:
>
>Strom aus
>ISP druecken
>Strom an
>Flashen

Jetzt hat die Methode doch funktioniert. Im ersten Anlauf habe ich GND 
und VCC getrennt. Das hat beim Einschalten wohl zum Verhaspeln des 
Autodetect geführt.
Jetzt habe ich es noch mal probiert, indem ich nur VCC getrennt und 
wieder verbunden habe. Und sieh da: Der Controller ist gerettet :-)

Besten Dank.

von JojoS (Gast)


Lesenswert?

hier ist die Änderung beschrieben:
https://github.com/microbuilder/LPC810_CodeBase/commit/9ccd1cd4e44a056add509a4059eab0e609b11e81

Der LPC810 hat kein JTAG, nur die abgespeckte SWD Funktion. Mit der 
Änderung wurde SWD und Reset abgeschaltet, siehe User Manual UM10601 S. 
131. Damit der Reset Pin aktiv ist muss also Bit6 im PINENABLE0 Register 
auf 0 gesetzt werden.
Der ISP funktioniert immer, zur Not eben durch Power Off/On. Richtig 
aussperren kann man sich nur wenn man die CRP3 (code read protection) 
oder NO_ISP aktiviert, aber das macht man nicht aus versehen.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank,

die Datenblätter sind ja immer recht umfangreich und man kann kaum alles 
lesen. Ich habe nur die Tabelle oben gefunden, die ein wenig nach JTAG 
aussah.

von JojoS (Gast)


Lesenswert?

Jein, das JTAG ist wohl nur für den Chip Test, S.330. Debuggen und 
Flashen geht nur über SWD.
Ich habe auch die Hex files angesehen, da finde ich aber nur die 
0xfffffffbf im Code, danach müsste der Reset bei beiden Hex files im 
Tools Verzeichnis funktionieren.

von chris_ (Gast)


Lesenswert?

>Ich habe auch die Hex files angesehen, da finde ich aber nur die
>0xfffffffbf im Code,

Hmm .. seltsame Sache. Ich hatte das Programmierproblem beim orginalen 
LPC auf dem Minikit-Board. Den habe ich dann durch "zerstörendes 
Entfernen" durch einen neuen in einer Fassung ersetzt. Bei diesem hat 
sich dann der selbe Effekt wie ursprünglich ergeben.
Erst mit dem Spannung wegnehmen anstatt mit Reset konnte ich den 
Prozessor wieder programmieren.

Ich habe jetzt den Source Code ein wenig verändert und neu compiliert. 
Das Programmieren funktioniert wiederholt wunderbar.

Wenn Du Lust und Zeit hast, kannst Du ja das Hex-File mal auf eine 
LPC810 flashen. Es müsste sich dann der gleiche Effekt einstellen.

von noreply (Gast)


Lesenswert?

@JojoS

Danke für den Hinweis mit den Jein. Ich habe im Dokument LPCXpresso 
LPC800 rev B.pdf die Beschreibung JTAG-Schnittstelle in Erinnerung.

von JojoS (Gast)


Lesenswert?

chris_ schrieb:
> Wenn Du Lust und Zeit hast, kannst Du ja das Hex-File mal auf eine
> LPC810 flashen. Es müsste sich dann der gleiche Effekt einstellen.

ich habe keinen LPC8xx, nur die 32 Bitter. Habe nur kurz durch das UM 
geblättert.
Hier wurde das Problem auch schon mal diskutiert:
http://www.lpcware.com/content/forum/lpc800-mini-kit-cannot-enter-isp-reset-mode

von chris_ (Gast)


Lesenswert?

>ich habe keinen LPC8xx, nur die 32 Bitter.

Nur der Ordnung halber:

LPC810M021FN8

 System:

    ARM Cortex-M0+ processor, running at frequencies of up to 30 MHz 
with single-cycle multiplier and fast single-cycle I/O port

    Serial Wire Debug (SWD) and JTAG boundary scan modes supported

Memory:

    4 kB on-chip flash programming memory
    1 kB SRAM

>Hier wurde das Problem auch schon mal diskutiert:
>http://www.lpcware.com/content/forum/lpc800-mini-k...
Danke. Wenn man nur immer gleich das Richtige im Internet finden könnte 
... ;-)
Aus dem Problem folgend habe sie wohl das Blinky in Github korrigiert, 
aber leider nicht das HelloWorld.

von chris_ (Gast)


Lesenswert?

Hier kann man ganz gut erahnen, was man aus so einem kleinen 32Bit 
ARM-Prozessor mit single Cycle Multiplier so rausholen kann:

http://hackaday.com/2014/06/14/an-arm-based-dsp-modelling-synth/

von chris_ (Gast)


Lesenswert?

Kennt jemand von euch ein Programm für das serielle flashen von Linux 
aus?

Im Moment habe ich dieses gefunden:
http://www.lpcnow.com/articles/share/291936/

Ein Programm mit graphischer Oberfläche wäre mir aber lieber.

von J. (Gast)


Lesenswert?

chris_ schrieb:
> Kennt jemand von euch ein Programm für das serielle flashen von Linux
> aus?

Das Standard-Programm dafür ist lpc21isp.

> Ein Programm mit graphischer Oberfläche wäre mir aber lieber.

Pffft.

von J. (Gast)


Lesenswert?

chris_ schrieb:
> Hier kann man ganz gut erahnen, was man aus so einem kleinen 32Bit
> ARM-Prozessor mit single Cycle Multiplier so rausholen kann:
>
> http://hackaday.com/2014/06/14/an-arm-based-dsp-modelling-synth/

Leider wollte er auf Nachfrage nicht mit Details herausrücken, wie er 
das gemacht hat, besonders die Audioausgabe.

von chris_ (Gast)


Lesenswert?

Ja, er hat wohl längere Zeit daran gearbeitet und dann ein 
Kickstarter-Projekt innitiert. Das scheint aber nicht ganz so gut 
gelaufen zu sein und er möchte seine Erkenntnisse nicht verschenken.

Er hat das selbe Prinzip verendet wie ich hier

http://hobby-roboter.de/forum/viewtopic.php?f=5&t=141

Allerdings hat er die Sigma-Delta-Loop in Assembler programmiert und 
kommt dann mit dem LPC auf 3.6MSP.

von chris_ (Gast)


Lesenswert?

>Das Standard-Programm dafür ist lpc21isp.
Danke.

>Im Moment habe ich dieses gefunden:
>http://www.lpcnow.com/articles/share/291936/
>Ein Programm mit graphischer Oberfläche wäre mir aber lieber.

Mittlerweile habe ich das Python Programm aus dem Link ausprobiert und 
muss sagen, es funktioniert super unter Ubuntu und ist rasend schnell. 
Deshalb brauche ich lpc21isp wohl nicht.

Mal eine andere Frage: Hat jemand von euch Beispielcode für eine PWM auf 
dem LPC810 ?

von Lothar (Gast)


Lesenswert?

chris_ schrieb:
> Beispielcode für eine PWM auf dem LPC810

Hardware PWM funktioniert mit dem SCT das ist etwas komplex. Hier ein 
einfaches Beispiel:

http://www.hwhardsoft.de/english/projects/simon-says/

Oder maximal ausführlich hier:

http://www.lpcware.com/content/nxpfile/lpc80-sct-cookbook-and-tutorial-code-examples

Ansonsten Software PWM mit dem MRT:

http://blog.nano-age.co.uk/2014/08/some-other-lpc810-mrt-uses.html

von chris_ (Gast)


Lesenswert?

Dankeschön, das werde ich mir mal anschauen.
Ich möchte Sound mit einer 10Bit-PWM mit 30kHz erzeugen.

von chris_ (Gast)


Lesenswert?

Im Moment lese ich mich gerade in die Architektur des LPC810 ein.

Es gibt scheinbar zwei Timer:

SCT ( state configurable timer )
MRT ( multi rate timer )

Wobei der MRT anscheinend 4 Kanäle?? hat. Für mich sieht das nach 
sprachlicher Verwirrung aus. Meinen die vielleicht einen Timer-Block mit 
4 Timern darin?

11.2 Features
•31-bit interrupt timer
•Four channels independently counting down from individually set values
•Repeat and one-shot interrupt modes

von Lothar (Gast)


Lesenswert?

chris_ schrieb:
> Es gibt scheinbar zwei Timer:
>
> SCT ( state configurable timer )
> MRT ( multi rate timer )

Richtig, hatte ich ja schon geschrieben :-)

Der MRT ersetzt beim LPC8xx die bisher in den LPC1xxx vorhandenen Timer. 
Der SCT ist eine State Machine und wurde vom LPC4xxx übernommen.

chris_ schrieb:
> Wobei der MRT anscheinend 4 Kanäle?? hat. Für mich sieht das nach
> sprachlicher Verwirrung aus. Meinen die vielleicht einen Timer-Block mit
> 4 Timern darin?

Timer-Block mit 4 Timern.

von chris_ (Gast)


Lesenswert?

>Timer-Block mit 4 Timern.

Danke.

Ich hatte in diesem Datenblatt gelesen:
http://www.nxp.com/documents/user_manual/UM10601.pdf
( s.164)
Ich frage mich, ob man solche Datenblätter sprachlich nicht korrekter 
Schreiben könnte. Da könnte ja

4 MRT timers

anstatt ein

one MRT timer with 4 Channels stehen.

von noreply (Gast)


Lesenswert?

chris_ schrieb:
> 4 MRT timers
>
> anstatt ein
>
> one MRT timer with 4 Channels stehen.

4 Timer könnte z.B. 4 unterschiedlich einstellbare Clocksourcen 
bedeuten.

@Lothar,

gibt es Public Domain Software zum Konfigurieren der SCT-Timer. Ich habe 
in den Beispielen viel von "do not edit, autogenerated" gelesen.

von Lothar (Gast)


Lesenswert?

noreply schrieb:
> Public Domain Software zum Konfigurieren der SCT-Timer

Im kostenfreien LPCXpresso ist der "Red State SCTimer/PWM state machine 
generator" enthalten, der den LPC81x SCT unterstützt.

Lustigerweise sehe ich grade, dass es dort bereits den LPC82x gibt, der 
ist noch gar nicht angekündigt :-)

Es geht aber auch "zu Fuss" schliesslich hat der LPC81x SCT nur 2 
Zustände:

http://de.wikipedia.org/wiki/Moore-Automat

von chris_ (Gast)


Lesenswert?

Der SCT-Timer ist wirklich nicht einfach zu bedienen.
Zuerst das Starten des SCT-Timers den MRT-Timer lahm gelegt, obwohl dass 
die beiden nichts miteinander zu tun hatten.
Ich will den SCT-Timer für die Erzeugung eines PWM-Signals mit 30kHz 
Periode nutzen.
Das hat mittlerweile auch geklappt.

Jetzt hänge ich am nächsten Problem: Ich will eine Tabelle in der 
SCT-Interruptroutine auslesen und den PWM-Wert aktuallisieren.
Hintergrund: Tonererzeugung

Ich habe ein Tesprogramm gemacht, in dem der PWM wert mittels eines 
Zählers hochgezählt wird. Leider bleibt der nach ein paar Zyklen 
irgendwo hängen.

Der Code sieht so aus:
1
void init_sct(uint8_t channel)
2
{
3
  // set pre-scalar, SCT clock = 1 MHz, clear counter
4
    //LPC_SCT->CTRL_L |= (((SystemCoreClock/1000000-1) << 5) | (1<<3));
5
6
  // connect SCT OUTP_0 to IO-PIN
7
  LPC_SWM->PINASSIGN6 &=0x00FFFFFF;
8
  //LPC_SWM->PINASSIGN6 |=3<<24; // SCT OUTP_0 at P0.3
9
  LPC_SWM->PINASSIGN6 |=channel<<24; // SCT OUTP_0 at P0.3
10
11
  LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 8); // enable the SCT clock
12
  sct_fsm_init(); // Initialize SCT
13
14
  LPC_SCT->EVEN = (1 << 0);    // enable EVENT0 interrupt
15
  NVIC_EnableIRQ(SCT_IRQn); // enable SCT interrupt
16
17
  LPC_SCT->CTRL_L &= ~(1<<2); // start the SCT by clearing bit 2 in CTRL
18
}
19
20
void SCT_IRQHandler(void)
21
{
22
  uint32_t status = LPC_SCT->EVFLAG;
23
24
  //LPC_GPIO_PORT->NOT0 = 1 << 3;
25
  static uint16_t value=100;
26
  LPC_SCT->MATCHREL[1].L=value++;
27
  if(value>800)value=100;
28
29
  // Acknowledge interrupts
30
  LPC_SCT->EVFLAG = status;
31
  return;
32
}

von Lothar (Gast)


Lesenswert?

Warum nimmst Du nicht das empfohlene Beispiel für Sound?

http://www.hwhardsoft.de/english/projects/simon-says/

chris_ schrieb:
> void SCT_IRQHandler(void)
> {
>   uint32_t status = LPC_SCT->EVFLAG;
>
>   //LPC_GPIO_PORT->NOT0 = 1 << 3;
>   static uint16_t value=100;
>   LPC_SCT->MATCHREL[1].L=value++;
>   if(value>800)value=100;

Macht so keinen Sinn, value muss global sein.

>
>   // Acknowledge interrupts
>   LPC_SCT->EVFLAG = status;
>   return;

Keine Ahnung was return in einem IRQHandler bewirkt. Im besten Fall wird 
es ignoriert. Aber besser weglassen.

> }

von chris_ (Gast)


Lesenswert?

Hallo Lothar,
>Warum nimmst Du nicht das empfohlene Beispiel für Sound?
>http://www.hwhardsoft.de/english/projects/simon-says/

So weit ich das sehen kann, nutzt er den SCT Tmier als 
Rechteckgenerator. Ich will aber analoge Töne mit der PWM produzieren. 
Deshalb brauche ich eine Update-Rate von ca. 30kHz.

>>   static uint16_t value=100;
>>   LPC_SCT->MATCHREL[1].L=value++;
>>   if(value>800)value=100;

>Macht so keinen Sinn, value muss global sein.

"value" ist eigentlich erst mal nur zum testen gedacht. Ich wollte value 
in der Interruptroutine hoch zählen, um zu sehen, ob es funktioniert. So 
wie es da geschrieben steht, sollte eigentlich eine Sägezahnschwinung 
ergeben. Die PWM ändert sich aber nur kurz ( ca. 1Sekunde ), dann bleibt 
sie auf einem Wert hängen.

von noreply (Gast)


Lesenswert?

siehe Kommentar und wie Lothar gesagt hat, static uint16_t value=100; 
rausziehen und global machen. static könnte zwar funktionieren, ließt 
sich aber schlecht und zum initialisieren benötigt man sonst noch ein 
Flag, etc.

chris_ schrieb:
> void SCT_IRQHandler(void)
> {
>   uint32_t status = LPC_SCT->EVFLAG;
>
>   //LPC_GPIO_PORT->NOT0 = 1 << 3;
>   static uint16_t value=100; /* hier setzt man nach jeden Interrupt value wieder 
auf 100 */
>   LPC_SCT->MATCHREL[1].L=value++;
>   if(value>800)value=100;
>
>   // Acknowledge interrupts
>   LPC_SCT->EVFLAG = status;
>   return;
> }

von chris_ (Gast)


Lesenswert?

Danke für die Antwort, aber daran liegt es nicht, da ich es auch schon 
anders probiert habe.

aus http://de.wikibooks.org/wiki/C-Programmierung:_static_%26_Co.

"Das Schlüsselwort static hat in C eine Doppelbedeutung. Im Kontext 
einer Variablendeklaration innerhalb einer Funktion sagt dieses 
Schlüsselwort, dass diese Variable auf einer festen Speicheradresse 
gespeichert wird. Daraus ergibt sich die Möglichkeit, dass eine 
Funktion, die mit static-Variablen arbeitet, beim nächsten Durchlauf die 
Informationen erneut nutzt, die in der Variablen gespeichert wurden (wie 
in einem Gedächtnis)."

Ich verwende es eigentlich ganz gerne und oft. Damit ist eine Kapselung 
der Daten innerhalb einer Funktion möglich, was bei der 
Objekt-orientierten Programmierung gerne benutzt wird.

von noreply (Gast)


Lesenswert?

@chris,

Sorry stimmt. Meinen Kommentar von oben vergessen. Ich habe ein 
vergleichbares Programmierkonstrukt mal schnell in linux implementiert. 
Der Zähler value geht hoch. Setzt aber auch voraus, das der Compiler es 
richtig macht. ;-)

von chris_ (Gast)


Lesenswert?

Hallo Zusammen,

jetzt stelle ich mal die Version 1 der Library online:
http://hobby-roboter.de/forum/viewtopic.php?f=4&t=152&p=600#p600

Es gibt ein Beispiel um Melodien zu spielen. Allerdings werden im Moment 
auch nur Rechtecksignale erzeugt.

Ich hoffe, dass ich irgendwann die PWM noch so weit hin kriege, dass ich 
auch analoge Töne erzeugen kann.

von Lothar (Gast)


Lesenswert?

chris_ schrieb:
> Ich hoffe, dass ich irgendwann die PWM noch so weit hin kriege, dass ich
> auch analoge Töne erzeugen kann.

PWM ist immer ein Rechtecksignal, um daraus ein Analogsignal zu erzeugen 
verwendet man einen externen Filter:

http://provideyourown.com/2011/analogwrite-convert-pwm-to-voltage/

Direkt ein Analogsignal erzeugen geht mit Software Sigma-Delta-DAC. Hier 
ein Beispiel für AVR. Mit dem LPC810 ginge es natürlich viel besser und 
schneller mit SCT und Komparator, und es wurde auch schon programmiert, 
aber derjenige rückt nur das Binary raus, nicht sein Programm:

http://www.hobby-roboter.de/forum/viewtopic.php?f=5&t=141

Hier das Prinzip PWM gegen Sigma-Delta-DAC:

http://jjmk.dk/MMMI/Exercises/05_Counters_Shreg/No7_PWM_vs_SigmaDelta/index.htm

von Lothar (Gast)


Lesenswert?

chris_ schrieb:
> Allerdings werden im Moment auch nur Rechtecksignale erzeugt.

Lothar schrieb:
> Hier ein Beispiel für AVR.

Sehe grade, das Beispiel ist ohnehin von Dir, oder :-) Dann sollte es 
auf dem LPC810 erst mal auch laufen.

von chris_ (Gast)


Lesenswert?

>Sehe grade, das Beispiel ist ohnehin von Dir, oder :-)

Ja ;-)

Ich hatte auch schon einmal einen mehrstimmigen PWM-Synthesizer mit dem 
LPC1114 programmiert:
http://hobby-roboter.de/forum/viewtopic.php?f=5&t=140
( Das File ArmPcSound spielt Bach mehrstimmig auf dem LPC1114, es klingt 
gar nicht schlecht ... )

Die Experimente mit dem Sigma-Delta-DAC wurden hier wohl als Inspiration 
genommen:
http://hackaday.com/2014/06/14/an-arm-based-dsp-modelling-synth/
Die Sigma-Delta-Loop ist dort ist in Assembler programmiert und die 
Aktualisierung des Wertes erfolgt in einer 44kHz Interrupt Routine.

Was mich daran stört, ist, dass der DAC in der Main-Loop laufen muss und 
immer schlechter wird, je mehr Rechenzeit die Signalgeneratoren und 
Filter brauchen.

Deshalb will ich lieber zurück zum PWM-DAC wie bei meinem LPC1114 
Projekt. Der ist nicht ganz so gut wie die Assembler-Sigma-Delta Loop, 
aber kostet keine Rechenzeit und lässt sich vor allen Dingen mit meiner 
Library hier

http://hobby-roboter.de/forum/download/file.php?id=191

kombinieren.

von chris_ (Gast)


Angehängte Dateien:

Lesenswert?

Weiß jemand von euch, ob man einen 5V USB-Serial Converter direkt an den 
LPC810 anschließen kann?
Im Datenblatt finde ich zur 5V Toleranz die obige Tabelle. Ich würde sie 
so interpretieren, dass es kein Problem sein sollte.

Außerdem suche ich nach dem Schaltpegel für die Digitaleingänge, da 
konnte ich aber noch keine Angaben finden. Ich möchte ein paar digitale 
Eingänge bei einer Versorgungsspannung mit 3.3V mit einem Signal von 
1.6V schalten. Die Frage ist, ob der Pegel reicht.

von Lothar (Gast)


Lesenswert?

chris_ schrieb:
> Weiß jemand von euch, ob man einen 5V USB-Serial Converter direkt an den
> LPC810 anschließen kann?

Sicher kann man das, nur ist halt P0.0 zugleich ISP-RX und 
Analog-Eingang. Wenn man also ein Programm hat, das den Analog-Eingang 
nutzt, und vergisst nach dem Flashen das ISP-RX abzuziehen, könnte der 
Komparator hinüber sein.

Aber warum nicht einfach einen Spannungsteiler oder eine LED davor?

von chris_ (Gast)


Lesenswert?

>Aber warum nicht einfach einen Spannungsteiler oder eine LED davor?

Ich versuche immer, den Bauteile Aufwand möglichst gering zu halten.
Wenn man einen seriellen Programmer wie diesen hier

http://hobby-roboter.de/forum/download/file.php?id=193

auf Experimentierplatinen aufbaut, ist es gut, wenn nicht so viele 
Bauteile darauf sind weil es leicht zu Wackelkontakten kommt.

Auf die Idee mit der LED in Serie bin ich noch nicht gekommen. Ich 
wollte so was machen:

LPC810Pin <-- 1k ------ 1k ----< ProgrammiermikrocontrollerPin ( ProgMC 
)
                    |
                    |
                   LED
                    |
                    |
                   GND

Damit könnte man die LED gleichzeitig als Anzeige LED nutzen wenn man 
den ProgMC-Pin hochohmig schaltet.
Mann könnte den ProgMC auch als In-Circuit Logikanalysator verwenden, 
wenn man die Eingänge abfragt.

von chris_ (Gast)


Lesenswert?

Nachdem ich mich einige Zeit mit der Integration der Software in die 
Arduino-IDE herum geschlagen habe, hier das Ergebnis:

http://hobby-roboter.de/forum/viewtopic.php?f=4&t=152&p=604#p604

Damit sollte die Installation der Arm-Tool-Chain wirklich einfach sein, 
man muss fast nichts tun.

Alpha Tester sind gerne willkommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.