Forum: Mikrocontroller und Digitale Elektronik SAM D20 LED Dimmung mit PWM


von light_Sabre (Gast)


Lesenswert?

Hallo, ich bin gerade dabei mein erstens Programm mit dem Atmel Sam D20 
zu schreiben. Es geht dabei um die Dimmung einer LED an einem Port Pin 
(z.b.: PA22).
Allerdings habe ich große Probleme mit dem Controller.
Ich habe schon 8bit Controller programmiert, und nun muss ich leider 
sagen das mir der umstieg extrem schwer fällt.
Kann mir jemand eventuell ein Beispiel zeigen wie ich das mit dem SAM 
D20 hinbekommen kann? Für den Anfang würde ich das ganze gerne so 
einfach wie möglich halten also ohne ASF (falls es ohne einfacher ist).

Besten Dank schon im Voraus!

von Lothar (Gast)


Lesenswert?

Schau mal hier:

https://github.com/ataradov/embedded/blob/master/examples/samd20/main.c

Es geht allerdings noch "direkter": im Manual stehen die Adressen der 
Port-Register die DIRSET und OUTSET heissen. Somit:

#define DIRSET 0x...
#define OUTSET 0x...

*((unsigned long *) DIRSET) |= 1<<(pin);
*((unsigned long *) OUTSET) ^= 1<<(pin);

Das wäre dann erstmal Soft-PWM. Für Hard-PWM musst Du wohl das 
Timer-Kapitel im Manual ansehen.

Wenn Du aber noch nicht auf Atmel M0+ festgelegt bist, es gibt deutlich 
einfachere ARM Implementierungen z.B. NXP M0+ LPC800

Hier gibt es auch viel mehr Beispiele (für fast alles).

https://github.com/cpldcpu/light_ws2812/tree/master/light_ws2812_ARM

von Paul (Gast)


Lesenswert?

für den SAMD21 (etwas mehr Peripherie) gibt es eine ganz schöne 
Training-Stunde wie man eine PWM macht
https://gallery.atmel.com/Products/Details/77af294f-a20c-4758-937b-514aeca54235

Darüberhinaus gibt es doch unzählige fertige Beispiele im ASF. schau mal 
unter File new example projects, wähl das SAMD20 xplain pro kit aus und 
stöber...
z.b. das fertige Beispiel
SAMD20/D21 QTouch Self capacitance example
enthält Code welches eine RGB LED ansteuert

wenn das nicht reicht gibt es doch einige appnotes, z.b.
http://www.atmel.com/Images/Atmel-42123-SAM-D20-D21-Timer-Counter-Driver-TC_Application-Note_AT03263.pdf

einfach mal umschauen was es so gibt.

von Lothar (Gast)


Lesenswert?

Paul schrieb:
> unzählige fertige Beispiele im ASF

Es wurde ja gefragt ob es direkt also ohne ASF geht. Dazu wie ASF RAM 
frisst, was ja beim M0 ein Problem ist, siehe hier:

Beitrag "Erste Schritte mit ARM SAMD20"

Wenn man einen M4 hat kann man natürlich ASF ohne Nachdenken nutzen.

von light_Sabre (Gast)


Lesenswert?

Erstmal danke für die Hilfe.

Den Beitrag "Erste Schritte mit ARM SAMD20" hab ich mir bereits 
durchgesehen, brachte mich aber leider nicht wirklich weiter.

Ein Umstieg vom Controller her ist leider nicht möglich da es bei mir 
hauptsächlich um Touch Anwendungen geht, und da ist der SAMD wirklich 
toll.

Deshalb beschränkt sich das programmieren auch meist auf einfache 
Anwendungen wodurch ich nicht sehr geübt bin. Darum dauert das ganze 
immer etwas länger. ;)

von Paul (Gast)


Lesenswert?

Lothar schrieb:
> Paul schrieb:
>> unzählige fertige Beispiele im ASF
>
> Es wurde ja gefragt ob es direkt also ohne ASF geht. Dazu wie ASF RAM
> frisst, was ja beim M0 ein Problem ist, siehe hier:
>
> Beitrag "Erste Schritte mit ARM SAMD20"
>
> Wenn man einen M4 hat kann man natürlich ASF ohne Nachdenken nutzen.

als Referenz taugt es aber alle Mal! Die Appnote stellt die Timer sehr 
gut dar. Und wo ist das Problem den Debugger einzuschalten, den 
Breakpoint auf die erste Anweisung in der Main zu setzen und das 
Beispiel durchzusteppen?
Ich habe programmieren gelernt, indem ich fertige Programme angefangen 
habe zu Debuggen, und das nicht auf einem einfachen AVR sondern auf 
leistungsfähigeren Prozessoren.

von light_Sabre (Gast)


Lesenswert?

Hallo ich habe jetzt das Programm fertig, danke für die Hilfe!!

Aber natürlich habe ich auch schon das nächste Problem:
Ich habe meine Schaltung mit einem SAM D20E14 aufgebaut und nun reicht 
der Speicher nicht für die Anwendung die ich habe.
Meine Anwendung besteht aus 1 Slider 1 Button und 1 Hardware PWM, wie 
kann da der Speicher voll werden????
Hat von euch jemand einen Tipp wie ich den SPeicherverbrauch reduzieren 
kann?
Alleine wenn ich im Qtouch Project Builder den SLider und den Button 
einfüge berechnet er das ca. 58% Code memory und 13% Data memory 
benötigt werden. Nach dem Compilieren sind es allerdings: 77% Code 
memory und 58% Data memory
bei meinem Programm  mit der PWM 105% code memory und 441,4% Data memory

Wisst ihr wie ich das optimieren kann, gibt es dazu im Atmel Studio 
irgendwelche Enstellungen oder kann ich einen anderen Compiler für das 
selbe Programm benutzen?

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.