Forum: Mikrocontroller und Digitale Elektronik Umschreiben von ATmega328 auf ATtiny


von Lutz H. (ottorius)


Angehängte Dateien:

Lesenswert?

Hallo erstmal,
habe ein Programm für einen 4-Kanal-RC-Schalter, der auf dem ATmega328P 
super läuft. Muss aber aus Platzgründen umsteigen auf den ATtiny85. Ich 
bin ziemlich am Ende, es läuft nicht auf dem ATtiny. Meine Vermutung ist 
ein Fehler bei den Interruptsettings.
Der ATmega lief mit 16MHz und den ATtiny hab ich auf 8MHz eingestellt 
und beschreibe ihn mit dem STK500. Ich hab mal beide Sketche angehängt, 
vielleicht kann jemand da mal drüber schauen. Danke schonmal
Lutz

von Lutz H. (ottorius)


Angehängte Dateien:

Lesenswert?

Die zweite Datei hab kommt jetzt, verklickt :-(

von leo (Gast)


Lesenswert?

Lutz H. schrieb:
> Die zweite Datei hab kommt jetzt, verklickt :-(

  DDRB &= ~(0 << PB2);

Weiter kam ich nicht, ... ah ja, und bitweise vs. logische Ops.
Du solltest mal zuerst deinen C-Skill uppen.

leo

von Ottorius (Gast)


Lesenswert?

Hab eigentlich nur aus Frust das geändert, danke erstmal. Das ist 
definitiv falsch. Meld mich morgen nochmal.

von Lutz H. (ottorius)


Lesenswert?

Könnte immer noch Hilfe gebrauchen, der Fehler war wohl nicht 
entscheidend. Sind bestimmt noch mehr drin.

von Peter D. (peda)


Lesenswert?

Es würde helfen, wenn Du mal sagst, was das Programm eigentlich machen 
soll.

von Peter D. (peda)


Lesenswert?

Lutz H. schrieb:
> es läuft nicht

Du mußt schon konkreter werden.

Du benutzt ja alle 5 IOs. Nimm erstmal nur 2 Ausgänge und benutze die 
freien 2 Pins für Debugausgaben (UART oder LEDs).

von npn (Gast)


Lesenswert?

leo schrieb:
> C-Skill uppen

...was bist du denn für ein Freak?

von Lutz H. (ottorius)


Lesenswert?

Das Programm kriegt vom Empfänger einen Rechteckimpuls dessen Länge 
durch die Interruptroutine bestimmt wird zwischen 1000 und 1800 us. Beim 
kurzen Tasten nach rechts wird Kanal1 geschaltet, beim langen Tasten(ca 
1s) Kanal2 und dann das ganze nach rechts.
Die ISR zählt alle 10 us die Impulszahl.
Hat beim ATmega328P super geklappt, aber halt am ATtiny nicht.
Bin natürlich Anfänger oder Freak wie auch immer, würde mich trotzdem 
über Hilfe freuen (C uppen ?? was ist damit gemeint)
IMHO liegt es an der ISR bzw. der Einstellung des Timers, denn der Rest 
ist durch die Umstellung geblieben.

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Lutz H. schrieb:
> Ich bin ziemlich am Ende, es läuft nicht auf dem ATtiny.

... ich denke, du bist eher talentfrei, weil zu doof zum lesen der 
Attiny85 Doku und programmieren kannst du gleich null!
Aber dafür super copy&past und sonst viel rumsülzen!

? TCCR0B |= (1 << WGM01); //CTC-Mode einschalten
TCCR0A! ... (see page 77 Attiny85 doku)

... eine globale Variable wird immer mit Null initialisiert und muß 
nicht extra mit Null initialisiert werden.
Das gleiche gilt für die meisten HW Register z.B. die ganzen TMR0 clears 
sind sinnfrei.

Der Rest deines Codes ist vorallem recht redundant und ugly!


mt

: Bearbeitet durch User
von Lutz H. (ottorius)


Lesenswert?

Ohje, so was habt ihr in eurem Forum

völlig talentfrei im Umgang mit Menschen, absolut programmierbar im 
täglichen Leben, weil gottgleich. Du gleichst einer globalen Variablen, 
aber vielleicht bist du es auch, eine globale Null man muss dich gar 
nicht initialisieren, das ist eine Konstante.

von Mal wegwerfen (Gast)


Lesenswert?

Jetzt aber weg mit dem Troll...

von Jens G. (jensig)


Lesenswert?

@ Apollo M. (Firma: @home) (majortom)

>... ich denke, du bist eher talentfrei, weil zu doof zum lesen der

Und zum eigentlichen Problem hast Du nichts zu sagen? Oder bist Du gar 
talentbefreiter als der TO?

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Jens G. schrieb:
> Und zum eigentlichen Problem hast Du nichts zu sagen?

Apollo M. schrieb:
> TCCR0A! ... (see page 77 Attiny85 doku)

... noch ein weiterer talentfreier mit Leseschwäche. Du bist sogar zu 
dämlich den aufgezeigten Fehler zu lesen!

Im Gegenteil zum To und den anderen blinden Wortmeldern, die sich hier 
oft und gerne ohne Inhalt melden, habe ich das Datenblatt nachgelesen 
und dem To Zeit geschenkt, die er nicht investieren wollte!


Lutz H. schrieb:
> Du gleichst einer globalen Variablen,
> aber vielleicht bist du es auch, eine globale Null man muss dich gar
> nicht initialisieren, das ist eine Konstante.

... tolle praktizierte Gutmensch-Moral! Was ihr Talenfreien nicht könnt 
- mit Kritik umgehen, dafür aber lieber beschweren, wenn man euch nicht 
gleich an die Hand nimmt, oder noch besser nicht gleich eure Arbeit 
selber erledigt.
Diese/eure DoppelMoral ist nur verlogen, weil was ihr kritisiert, wird 
im Gegenzug selber hier gerne praktiziert.


Klare Ansagen könnt ihr nicht, ihr werdet auch nie Leistungsträger und 
lebt lieber gut von der Arbeit anderer!
... wohl eher auch nur tauglich für den Ponyhof.

von Stefan F. (Gast)


Lesenswert?

Lutz H. schrieb:
> Hat beim ATmega328P super geklappt, aber halt am ATtiny nicht.

Was genau klappt denn beim ATtiny nicht? Du musst den Fehler einkreisen, 
typischerweise mit Hilfe von Debug Meldungen und ggf auch durch 
Reduktion des Codes auf die Teile, die du untersuchen willst.

von Stefan F. (Gast)


Lesenswert?

Apollo M. schrieb:
> eine globale Variable wird immer mit Null initialisiert und muß
> nicht extra mit Null initialisiert werden.

Ob  man das hinschreibt oder nicht ich technisch vollkommen egal. Manche 
Leute schrieben den Startwert gerne gut sichtbar in den Quelltext, wenn 
er für die Funktion wichtig ist.

Wenn du erst einmal wie ich mit 10 Programmiersprachen im Wechsel 
arbeiten musst, freust du dich über alles, was offensichtlich ist, statt 
implizit.

von Mario M. (thelonging)


Lesenswert?

Lutz H. schrieb:
> habe ein Programm für einen 4-Kanal-RC-Schalter, der auf dem ATmega328P
> super läuft
Timer 0 programmieren, den Interrupt von Timer 1 nutzen und es läuft? 
Respekt!

von MWS (Gast)


Lesenswert?

> PINB |= (1 << PB3);

Wenn das kein Anfängerfehler ist und eigentlich auf PORT geschrieben 
werden sollte, so bewirkt ein Schreiben auf's PIN-Register bei neueren 
Atmels ein Toggeln des Portpins.
Bei älteren bewirkt es nada - nichts.
Man sollte also herausfinden was der Tiny in so einem Fall macht, oder 
man schreibt den Code gleich besser, ein maximal schnelles Toggeln ist 
hier unnötig, da kann auch per Software getoggelt werden.

von c-hater (Gast)


Lesenswert?

MWS schrieb:

> Man sollte also herausfinden was der Tiny in so einem Fall macht

Ein Tiny85 ist diesbezüglich ein "neuerer AVR8", toggelt also genauso 
wie ein Mega328P.

von c-hater (Gast)


Lesenswert?

Lutz H. schrieb:

> Die zweite Datei hab kommt jetzt, verklickt :-(

Das ist Bullshit.

Timer0 gehört dem Arduino-Geraffel. Wenn du den umprogrammierst, werden 
Sachen wie delay() und millies() und damit jeder Code, der das benutzt, 
nicht mehr erwartungsgemäß funktionieren.

Dein Code benutzt selber millies(), also schon das erste Mal verloren. 
Außerdem benutzt du auch noch serial, was beim Tiny85 in Ermangelung 
entsprechender Hardware nur eine Software-UART sein kann, die vermutlich 
ihrerseits wiederum auch auf Timer0 basiert (direkt oder indirekt über 
die Verwendung von millies()). Also das zweite Mal verloren.

Tipps:
1) Wirf' den Arduino-Dreck weg.
2) Lern' programmieren.
3) Lese Datenblätter.

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.