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
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
Hab eigentlich nur aus Frust das geändert, danke erstmal. Das ist definitiv falsch. Meld mich morgen nochmal.
Könnte immer noch Hilfe gebrauchen, der Fehler war wohl nicht entscheidend. Sind bestimmt noch mehr drin.
Es würde helfen, wenn Du mal sagst, was das Programm eigentlich machen soll.
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).
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.
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
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.
@ 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?
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.
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.
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.
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!
> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.