Hy, ich bin gerade am verzweifeln, ich habe einen Attiny2313 an zwei MOSFETs als Treiberstufe angeschlossen, um die 3A je LED-Kanal per PWM zu betreiben, das funktioniert einwandfrei, Anfaden und Ausfaden klappt problemlos. Jetzt habe ich mir bei Reichelt zwei Drehencoder mit Taster bestellt und angeschlossen, funktionieren auch wunderbar. Wenn ich jetzt jedoch beides kombinieren will spinnt Alles nur noch rum, ich kann die blauen LED's nur noch über PWM aktivieren, wenn die Weißen bereits an sind und die Blauen gehen auch mit den Weißen zusammen aus, obwohl ich das gar nicht so programiert habe, habe auch schon mal die Taster versucht, da klappt es einen neuen Wert fürs PWM zu übergeben, da kann ich auch beide Kanäle getrennt betreiben. Ich habe auch schon den Timer mal durch 64 geteilt, da sieht man sehr deutlich, dass die Blauen bei einer Rechtsdrehung des Encoders kurz angehen, aber danach sofort wieder aus, wenn ich die Weißen anmache, dann bleiben die Blauen auch an. Also ich stehe vor einem Großen Rätsel und hoffe, dass es ein einfacher Fehler ist. Hier mal der aktuelle Code: $regfile = "2313def.dat" $crystal = 8000000 $prog &HFF , &HE4 , &HDF , &H00 ' generated. Take care that the chip supports all fuse bytes. Led1 Alias Portd.0 Led2 Alias Portd.4 Tast1 Alias Pinb.0 Tast2 Alias Pinb.1 Led1 = 0 Led2 = 0 Config Led1 = Output Config Led2 = Output Config Pinb.0 = Input Config Pinb.1 = Input Config Pinb.2 = Input Config Pinb.3 = Input Config Pinb.4 = Input Config Pinb.5 = Input Dim D As Byte Dim E As Byte Dim Weis As Byte Dim Blau As Byte Dim Pwm As Byte Config Timer0 = Timer , Prescale = 1 On Timer0 On_timer0 Enable Timer0 Enable Interrupts Do If Tast1 = 1 Then Waitms 100 <-zum entprellen, da der Befehl debounce ebenfalls nur kurz die led aufleuchten lässt Gosub Taster End If If Tast2 = 1 Then Waitms 100 Gosub Taster2 End If E = Encoder(pinb.3 , Pinb.2 , Wrechts , Wlinks , 0) D = Encoder(pinb.5 , Pinb.4 , Brechts , Blinks , 0) Loop End On_timer0: Incr Pwm Gosub Led_blau Gosub Led_weis Return Led_blau: If Blau <= Pwm Then Led2 = 0 Else Led2 = 1 End If Return Led_weis: If Weis <= Pwm Then Led1 = 0 Else Led1 = 1 End If Return Taster2: Weis = 0 Blau = 0 Return Taster: Weis = 255 Blau = 255 Return Wlinks: Weis = 0 Return Wrechts: Weis = 255 Return Blinks: Blau = 0 Return Brechts: Blau = 255 Return Die vielen Gosub's sind einfach noch versuche gewesen, einfach die blauen vor den weißen abzufragen, aber das brachte leider auch keine Änderung Ich hoffe ihr könnt mir helfen!
Da Du ja im GCC-Forum postest, könnte Dir bestenfalls jemand sagen, wie narrensichere Entprellroutine, Drehgeber einlesen und Software-PWM in C aussehen. Auch ist Dein Code ja super mangelhaft kommentiert und der Programmablaufplan ist super nichtexistent. Wenn Du unnütze Gosubs hast, ist es natürlich super nett von Dir, diese drin zu lassen, obwohl Du festgestellt hast, daß sie wirkungslos sind. Ein kleines bischen Entgegenkommen Deinerseits ist schon erforderlich, wenn Du Hilfe erwartest. Peter
sieht mir nach hardwarefehler aus ... pullup, pulldown etc.
Die Taster und Encoder sind über Pulldown-Widerstände an GND angeschlossen, funktionieren ja auch problemlos, nur wenn Encoder und PWM zusammen laufen soll gibt es Probleme
Wieso ist das hier ein GCC Forum ? Wieso seid ihr so muffig ?
@Peter Dannegger, Seltsam, diese Schulmeisterei von dir. Dein Code z.B. fboot.c ist wohl auch nicht besser kommentiert. Kann es sein , dass du auf Leute herabsiehst, die bascom nutzen? Du doch genug Zuspruch hier. Da könntest du doch drüber stehen und die anderen mal machen lassen. Und wenn du mal das Forum verwechselst, stünde dir ein "sorry" gut.
löte einmal 100 nf von den Drehgeberkontakten nach Masse. Das hilft gigantisch ! Dietmar
Wegen dem Forum, das habe ich verwechselt, der Beitrag wurde aber netterweise verschoben. Mit dem Kondensator habe ich leider auch kein besseres Ergebnis
Thomas, ich denke Bascom hat seinen Ruf weg, weil jeder sich geeignet und berufen fühlt solchen Murkscode zu programmieren, und es in Bascom aufgrund der geringeren Anforderungen einfacher möglich ist, etwas zu erzeugen, bei dem der Compiler nicht mehr meckert. Ob das dann Sinn hat, ist eine andere Sache. Mglw. daher die allergische Reaktion von Peter. Gäbe da verschiedene Verdächtige, einmal fehlen Angaben zu $HWSTACK und $SWSTACK, beide Speicherbereiche werden hier jedoch benutzt, siehe Aufruf ISR und in der ISR eine Gosub... Die Drehencoder, die bei Reichelt zu finden sind, sind optische Typen mit Fototransistor nach Masse, da prellt im Übrigen nix, nahm bereits an, daß C's da keinen Effekt haben. Und, was sind denn Pulldown Widerstände in diesem Zusammenhang ??? Der ENC 62P22-H0S z.B. benötigt Pullups, den mit Pulldown zu beschalten wäre völliger Krampf. Im obigen Code könnten sogar die internen PUp's des 2313 reichen, diese werden jedoch nicht eingeschaltet. Außerdem, der 2313 hat 4 PWM's, die völlig ohne Prozessorlast das Dimmen erledigen könnten. Du verwendest aber eine Soft-PWM, noch dazu mit Gosubs drin. Da schüttelt es mich. Eine ISR soll so klein und schnell wie möglich sein, noch dazu wenn sie oft aufgerufen wird, und Du verlängerst sie zusätzlich durch sinnlose Gosubs. Ich kann mir vorstellen, daß die Prozessorlast, die durch die SoftPWM erzeugt wird, die Encoderabfrage ins Schleudern bringt, deshalb erster Ratschlag: Auf HW PWM umstellen. Weiterer Vorschlag zur Fehlersuche: erst einmal nur einen Encoder in der Loop abfragen, sinnvollen Code in die Subs reinschreiben, um die Werte um eins zu erhöhen, so wie's wahrscheinlich später vorgesehen ist. Dann ist auch die Fehlersuche einfacher.
E = Encoder(pinb.3 , Pinb.2 , Wrechts , Wlinks , 0) D = Encoder(pinb.5 , Pinb.4 , Brechts , Blinks , 0) Du wertest weder D noch E aus und Du springst keinerlei Labels an (Wrechts Wlinks...). Ich habe jetzt auch keine Muße den Versuch zu unternehmen wasw Du da eigentlich programmieren wolltest. Grundsätzlich erkenne ich aber auch keine "Struktur" in Deinem Vorhaben ????????????????????? Welche Einzelprogramme sollen denn da funktioniert haben ?
gelegentlich wrote: > @Peter Dannegger, Seltsam, diese Schulmeisterei von dir. Ich wollte nur ausdrücken, daß es wenig nützt, wenn man aus der ersten Rage heraus irgendwas dahinpostet. Damit kriegt man wenig Hilfe. Man sollte erstmal in Ruhe die wichtigsten Punkte klären, also: - Was ist die Funktion des Programms (muß kein picobello PAP sein)? - Was erwartet man an welcher Stelle? - Was passiert stattdessen (Abweichung vom Gewünschten)? Und natürlich das Programm möglichst reduzieren, daß der Fehler noch auftritt. Alle möglichen probierten Sachen drinnlassen, die nur die Übesicht erschweren, ist nicht gerade doll. > Dein Code z.B. > fboot.c ist wohl auch nicht besser kommentiert. Ich stelle ja auch keine Fragen dazu, er funktioniert ja. Falls aber jemand was nicht versteht, beantworte ich es gerne, nur muß er fragen. > Kann es sein , dass du > auf Leute herabsiehst, die bascom nutzen? Ich habe etwas Probleme, die Bascom-Blackboxen (Libfunktionen) zu verstehen, daher wäre speziell dazu ein Kommentar nützlich. Ich habe aber sehr oft den Eindruck, daß Blackboxen benutzt werden, ohne in die Hilfe zu schauen. Daß es dann krachen muß, ist ja klar. Ich erwarte, daß die Poster hier so erwachsen sind und selber erstmal die Doku lesen. Sie ans Händchen nehmen zu müssen, habe ich keine Lust. > Da könntest du doch drüber stehen und die anderen mal machen lassen. Würde Dir Schweigen im Walde und die Fehler ungenannt lassen, besser helfen? Daß meine Art manchmal etwas direkt ist, kommt schon vor. > Und > wenn du mal das Forum verwechselst, stünde dir ein "sorry" gut. Der Beitrag wurde verschoben. Peter
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.