PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATtiny84a PWM



OpaReinhard
21.03.2016, 16:53
Hallo, ich bin neu hier im Netz (entschuldigt also bitte wenn noch nicht alles nach eurem Standard läuft).
Mein Problem: ich habe auf dem Arduino einen Sketch laufen, der mit PWMs arbeitet. Alles funktioniert einwandfrei. Dann habe ich den Sketch in einen ATtiny84a geladen. Auch das hat einwandfrei funktioniert. Nur das mit der PWM funktioniert beim ATtiny nicht. Die Ausgänge PIN 5,6,7, und 8 schalten nur digital. Hat jemand eine Lösung? Was habe ich nicht beachtet oder was mache ich falsch? :confused:

HeXPloreR
21.03.2016, 17:25
Hallo OpaReinhard,

du musst bedenken das "der Arduino" nur eine Board-Bennenung ist ... mit Glück läuft dort ein ganz normaler Microcontroller wie etwa ATmega 8 / 16 / 32 ...

Zum Problem:
Dir kann dazu geraten werden, zu prüfen in wie weit die Pins des einen mit dem anderen übereinander stimmen.
Vermutlich passen aber auch interne Register nicht vom Mega zu Tiny.

Oder auch wie du die Datei in den ATtiny gebrannt hast?
Vermutlich hast du per Bootloader die Datei in den ATiny gebrannt?!
Per ISP hättest du sicher eine Fehlermeldung bekommen, wenn der Chip nicht mit dem Programmcode übereinstimmt.
Grundsätzlich sollte man kein Programm für einen ATmega schreiben, compilieren und dann "einfach" die erzeugt Datei in einen anderen Chip ( ATtiny) laden.

Also eigentlich müsstest Du nochnmal genauer darstellen was du wie gemacht hast.
Denn so einfach ist es auch nicht.

Ich denke mal die Arduino Software (IDE) stellt überhaupt keine Datei für die Einbindung eines Tinys bereit - ich bin der Meinung die fangen überhaupt erst mit Megas an.
Aber so genau hab ichs mit der Arduino-IDE nicht.

Übrigens: Auch bei einer PWM auf dem Arduino wird der Pin digital geschaltet. Das ist normal so. ** PWM ist ein digitaler Vorgang.
Wie stellst du fest das dort jetzt ein Fehler produziert wird?


Viele Grüße
Jörg

**edit

OpaReinhard
21.03.2016, 17:49
Ich habe es schon öfter so gemacht, dass ich einen Sketch in der Arduino IDE geschrieben und mit dem Arduino Uno getestet habe. Wenn dann alles funktionierte habe ich die PINs angepasst und den Uno als Programmiergerät für die mit Bootlader versehenen ATtinys benutzt. Allerdings habe ich jetzt zum ersten Mal mit PWMs gearbeitet.
Festgestellt habe ich den Fehler daran, dass die angeschlossenen LEDs nicht in der Helligkeit geregelt werden (wie beim Arduino-Board). Sie leuchten mit voller Helligkeit. Angesteurt werden sie über "Zufallsgeneratoren"
for (a = 0; a < 256; a = (a + 3)) // LED flackern erst dunkel und werden dann innerhalb von ca. 20 sek (a + 3)immer heller
{
val = random(0,(a)); // Zufallszahl zwischen 0 und 255. 0 = LED aus, 255 = LED maximale Helligkeit.
analogWrite(ledPin1, val); // Setzt das PWM Signal auf die Zufallszahl
val = random(0,(a));
analogWrite(ledPin2, val);
val = random(0,(a));
analogWrite(ledPin3, val);
delayval = random(20,400); // Zufallszahl zwischen 20 und 400. 50 = schnell, 600 = langsam.
delay(delayval); // Setze die Wartezeit auf die Zufallszahl
ende = 1;

HeXPloreR
21.03.2016, 19:22
Dann versuche doch mal den Wert für a direkt zu schreiben - also z.b. 10 oder 100 - und schaue ob sich was entsprechendes tut.

Versuche mal einen einfacheren Code zu schreiben. Und poste den dann bitte komplett.
Momentan scheint noch was am Code zu fehlen. Mindestens ggf eine "}" hinter dem "delay(delayval);"

Kennst du dieses Papier?
Kapitel 7 und 10 sollten dich interessieren: http://www.netzmafia.de/skripten/hardware/Arduino/Arduino_Programmierhandbuch.pdf

Dir ist klar das der Arduino Uno einen ATmega328P_(Link auf Reichelt) (https://www.reichelt.de/ATMEGA-328P-PU/3/index.html?&ACTION=3&LA=446&ARTICLE=119685&artnr=ATMEGA+328P-PU&SEARCH=atmega328) verwendet, der laut Datenblatt 6 PWMs erzeugen kann. Der ATiny84a_(Link auf Reichelt) (https://www.reichelt.de/Atmel-Attiny-AVRs/ATTINY-84A-SSU/3/index.html?ACTION=3&GROUPID=2958&ARTICLE=148102) aber nur 2 PWMs erzeugen kann.
Und es allein aus diesem Grund schon Probleme mit von dir gezeigte Ansteuerung geben wird.


Ich habe es schon öfter so gemacht, dass ich einen Sketch in der Arduino IDE geschrieben und mit dem Arduino Uno getestet habe. Wenn dann alles funktionierte habe ich die PINs angepasst und den Uno als Programmiergerät für die mit Bootlader versehenen ATtinys benutzt.

Ich befürchte dann bist Du mit der Art wie du Microcontroller programmierst schon an Deine Grenzen angekommen.
Denn so funktioniert es bestenfalls mit Glück, aber gekonnt ist was anderes.

Wenn Du grundsätzliches interesse hast und einen ISP-Programmer besitzt der ggf mit Bascom zusammenarbeitet dann würde ich dir die Testversion von Bascom empfehlen.
Es ist ähnlich aufgebaut wie Arduino-C was Funktionen betrifft, nur ... *hüstel* es ist eben ein Basic-Dialekt. ABER man kann seinen Chip wenn er von Bascom unterstützt wird, selbst im Programmcode auswählen.
Ich bin mir nur grade nicht sicher ob das grundsätzlich mit der Arduino-IDE auch möglich ist. Und wenn doch, dann müsste es ja möglich sein ein Programm auch direkt passned für einen Tiny zu schreiben ohne "einfach nur die Pins" im Code für einen Mega zu ändern.

Viele Grüße
Jörg

OpaReinhard
22.03.2016, 22:08
@Jörg: Du hast sicher aus der Sicht eines Profis recht. Ich stehe am Scheideweg. Mir geht es eigentlich gar nicht darum Mikrokontroller zu programmieren. Angefangen habe ich letztes Jahr damit als es mir zu unrealistisch war, dass auf meiner Modelleisenbahn wenn es dunkel wurde alles Häuser auf einmal anfingen zu leuchten und dann auch noch alle Fenster eines Hauses auf einen Schlag. Mehr durch Zufall bin ich dann auf den Arduino gestoßen. Damit bin ich schon eine ganze Ecke weiter gekommen. Aber wie es dann so geht - wenn man einmal Blut geleckt hat will man mehr. So gestalte ich ganze Szenarien mit Mikrokontrollern. Ich hab manchmal den Eindruck die Modelleisenbahn wird langsam zur Nebensache, ist nur noch ein Mittel zum Zweck. Aber dann holen mich meine Enkel wieder auf den Boden zurück. Mal sehen wie es weitergeht.
Zurück zu meinem Problem: ich habe anstelle des Attiny einen Atmega eingesetzt. Damit funzt die Sache total gut. Der attiny war wohl doch mit den Zufallsgeneratoren überfordert.
In die Arbeit mit dem ISP-Programmer werde ich mich wohl trotzdem näher beschäftigen. Danke für Deine Antworten.

Rabenauge
23.03.2016, 11:46
Warum nimmste da nicht die kleinen Arduinos?
Den Pro Mini bekommt man unter 2€, und der ist sogar zum UNO noch kompatibel.
Hat auch ne eigene Spannungsversorgung an Bord, ist somit direkt einsetzbar, nur USB hat er nicht.
Kommt aber sicher billiger als jeder Eigenbau mit so nem Prozessor.
Das Ding ist ungefähr daumengross-in nen HO-Lastwagen kann man den schon einbauen.
Gibts auch in ner 3.3V-Variante (allerdings dann nur noch mit 8MHz).

OpaReinhard
23.03.2016, 19:34
@ Rabenauge:
danke für den Hinweis. Die Teile kenne ich noch nicht. Allerdings hätte ich mir eine Menge Zeit, Arbeit und Geld gespart wenn ich sie gekannt hätte. Das war für mich ein ganz wertvoller Hinweis. :p