Forum: Mikrocontroller und Digitale Elektronik Umschreiben von ATmega328 auf ATtiny


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lutz H. (ottorius)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
Die zweite Datei hab kommt jetzt, verklickt :-(

von leo (Gast)


Bewertung
1 lesenswert
nicht 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)


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

von Lutz H. (ottorius)


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

von Peter D. (peda)


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

von Peter D. (peda)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-4 lesenswert
nicht lesenswert
leo schrieb:
> C-Skill uppen

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

von Lutz H. (ottorius)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-4 lesenswert
nicht 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)


Bewertung
3 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Jetzt aber weg mit dem Troll...

von Jens G. (jensig)


Bewertung
2 lesenswert
nicht 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)


Bewertung
-4 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.