hallo Zusammen, bin dabei mich in die Uc-Programmierung in Bascom einzuarbeiten. habe aktuell ein kleines Projekt mit obigem Uc, das Probleme bereitet. Ich programmiere eine Lüftersteuerung mit - per SW - einstellbarem Nachlauf. An PB.0 und PB.1 liegen zwei Taster ( Schliesser) intern sind die Pull-ups eingeschaltet. An PB.2 und 3 sind 2 Ausgänge die ich auf ein Testboard ziehe und mit Transistor + LED erstmal den Status anzeige. Das Programm bis dahin tut genau was es soll. So, zu Testzwecken will ich jetzt PB4 als Ausgang verwenden um bestimmte Zustände zu kontrollieren. Dieser Ausgang PB4 war vorher als Eingang definiert mit einem internen Pull up , wurde aber nicht beschaltet. Problem ist jetzt folgendes : wenn ich da Programm in den Uc "schiebe" geht nichts mehr. Die Eingangsspannung an den Tastern PB.0 und PB.1 sinkt auf ca. 0,45 V (wenn Taster nicht gedrückt) und dazu noch bei einem Zustand, dass Ausgang PB.4 nicht beschaltet ist. ( also nicht verbunden mit Schalttransistor um den Status anzuzeigen) Frage : wie kommt das ?? Anmerkung : bei der Syntaxprüfung tritt kein Fehler auf; es wird angezeigt, dass der Speicher zu 95% gefüllt wird Wenn ich die Vorgängerversion - also die , die i.o war - wieder aufspiele (Programm Chip) ist wieder alles i.o. Der wesentliche Unterschied zwischen den Versionen ist, dass PB.4 zuerst ein Eingang ist, und dann als Ausgang verwendet wird, ( ist im Programm auch so ungesetzt!) Wer kann mir helfen / einen Tipp geben wo ich suchen sollte. Vielen Dank vorab! Gruss Theo
Theo Löcken schrieb: > Wer kann mir helfen / einen Tipp geben wo ich suchen sollte. Such mal den Schaltplan und den Code raus, dann beides hier posten :)
Theo Löcken schrieb: > An PB.2 und 3 sind 2 Ausgänge die ich auf ein > Testboard ziehe und mit Transistor + LED erstmal den Status anzeige. Trenne PB2 mal ab, es könnte sein, dass damit SCK behindert wird. ...
hallo Zusammen, vielen Dank für Eure Antworten. Zu der Frage nach einem Schaltplan, den gibt es so0 nicht. Das Experimentierboard für den AT Tiny 13 ist sebstgebaut. Alls PB's rausgeführt auf Buchsen ( 0,8mm) ; Reset mit 10 K an Vcc und ohne Kerko 100 nF. Die Ledtreiber ist ein Transistor Array ULM 28??? mit entsprechender Beschaltung. Zu dem Thema : Last an PB.2 abtrennen, dann erhöht sich die Spannung am "high End" des Tasters von 0,45 V wie oben beschrieben auf ca. 0,7 V sonst bleibt alles gleich. Ich hänge mal die beiden Programme an. Version 3 ist die die Problemlos läuft, Version 4 funzt überhaupt nicht. Das das kein optimaler Code ist, weiss ich, ich übe ja noch. Liegt in dem Code der Version 4 ein Fehler, der den AT Tiny 13 "ausrasten" lässt ? Vielen Dank für Eure Kommentare. Gruss Theo
hallo zusammen, um weiteren Beschwerden vorzubeugen, hier der Code von Version 4, die Probleme bereitet , in diesen Thread copiert : Lüfter Prog. Vers. 4 'Programm für ATTiny 13 um Lüfter Ein-bzw Auszuschalten und Timer zu aktivieren mit 'Nachlauf. Nachlaufzeit wird im Programm festgelegt. 'erstellt : Nov 2013 'Programmname : Luefter_stg(Lüfter Steuerung) 'Programmversion :V4 'Beschreibung : 'Nach anlegen der Versorgungsspannung sind alle Ausgänge auf Low '1. User drückt Taster eins; Ausgang PB0 wird auf High gesetzt ; Relais zieht an. 'User drückt Taster 1 nochmals ; PB0 wird auf Low gesetzt : Relais fällt ab '2. Wenn PB0 High ist , bewirkt das Drücken von T2 dass ein Timer eingeschaltet wird. 'Nach Ablauf dieses Timers fällt das Relais wieder ab. 'Die Anzahl der Tics (Constante Anz_Tiks) ist swo eizustellen, dass das Produkt aus 'Anz_Tiks und der Constante T3 1 sec ergibt. Die Zeit für die Berechnungen wird dabei erstmal 'nicht berücksichtigt.Anz_Tiks muss eine ganze gerade Zahl sein $regfile = "attiny13.dat" $crystal = 1200000 $framesize = 10 ' ist das so richtig ??? $swstack = 10 ' dito?? $hwstack = 10' dito ?? Config Pinb.0 = Input 'Port B.0 als Eingang (Taster Ein /Aus) Config Pinb.1 = Input 'Port B.1 als Eingang (Taster Timer ein) Config Portb.2 = Output 'Port B.2 als Ausgang (Relais schalten über Transistor) Config Portb.3 = Output 'Port B.3 als Ausgang (LED zur Aktivierung Timer) Config Portb.4 = Output 'als Testausgang für Zähler Eing_ein_aus Alias Pinb.0 'Eingang Eing_tim Alias Pinb.1 'Eingang Ausg_relais Alias Portb.2 'Ausgang Ausg_led Alias Portb.3 'Ausgang Ausg_test Alias Portb.4 Portb.0 = 1 'Pull-up R einschalten Portb.1 = 1 'Pull-up R einschalten 'Portb.4 = 1 'Port B.4 wird nicht genutzt , liegt aber hiermit auf def. Potential Const T1 = 15 'Wartezeit (ms) für Schalter entprellen Const T2 = 2 'Wartezeit (s) nach Schalter entprellen Const T3 = 25 'Wartezeit (ms) für die minimale Taktzeit Const Anz_ticks = 40 Const Maximp = 5 'Anzahl der Impulse bevor abgeschaltet wird Dim Ein_aus As Bit 'Zeigt Zustand ob mit Haupttaster eingeschaltet wurde oder nicht (0=aus 1 = ein) Dim I As Integer , J As Integer Dim Zeit As Bit 'Zeigt ob Zeittaster betätigt wurde (Nacfhlaufzeit) (0 = aus 1 = ein) Dim Zaehl_imp_a As Integer Dim Zaehl_imp_b As Integer Dim Ticks_2 As Integer 'Anzahl halbe Ticks: also Anz_Ticks / 2 Zeit = 0 'Variable die zeigt ob Timer eingeschaltet oder nicht (1=eingschaltet 0=nicht eingeschaltet) Ein_aus = 0 'Variable die den Zustand des Relaisausganges beschreibt (0=aus / 1 = ein) Zaehl_imp_a = 0 'Impulszähler a der mit der Min Tacktzeit T3 getacktet wird Zaehl_imp_b = 0 'Impulszähler b der von a getacktet wird über die Sub Zeittaster Ticks_2 = Anz_ticks / 2 Declare Sub Zeittaster() 'Sub wertet den Eingang PB1 aus Declare Sub Haupttaster() 'Sub wertet den Eingang PB0 aus Declare Sub Abfrage_t1() Declare Sub Alles_null() 'Ausg_relais = 0 'Ausg_led = 0 'Ausg_test = 0 Do If Ein_aus = 0 Then Haupttaster 'ruft die Sub Haupschalter() auf End If If Ein_aus = 1 Then Haupttaster 'ruft die Sub auf End If If Ein_aus = 1 Then Zeittaster End If If Zeit = 1 Then If Zaehl_imp_a = 0 Then Ausg_led = 1 Zaehl_imp_a = Zaehl_imp_a + 1 Ausg_test = 1 Waitms 10 Ausg_test = 0 Waitms T3 Elseif Zaehl_imp_a > 0 And Zaehl_imp_a < Ticks_2 Then Zaehl_imp_a = Zaehl_imp_a + 1 Ausg_test = 1 Waitms 10 Ausg_test = 0 Waitms T3 Elseif Zaehl_imp_a = Ticks_2 Then Ausg_test = 1 Waitms 10 Ausg_test = 0 Waitms T3 Ausg_led = 0 Zaehl_imp_a = Zaehl_imp_a + 1 Elseif Zaehl_imp_a > 20 And Zaehl_imp_a < Anz_ticks Then Ausg_test = 1 Waitms 10 Ausg_test = 0 Waitms T3 Zaehl_imp_a = Zaehl_imp_a + 1 Elseif Zaehl_imp_a => Anz_ticks Then 'Elseif Zaehl_imp_a = Anz_ticks Then Ausg_test = 1 Waitms 10 Ausg_test = 0 Waitms T3 Zaehl_imp_a = 0 Zaehl_imp_b = Zaehl_imp_b + 1 End If End If If Zaehl_imp_b = Maximp Then 'prüfen ob max Zeit erreicht ist; wenn wahr alles ausschalten und alle Zähler zurücksetzen auf 0 Alles_null End If Loop Sub Haupttaster() 'diese Sub fragt den Haupttaster ob gedrückt wird. Der Haupttaster schaltet den Lüfter ein / aus. 'Bei Start des Programmes ist der Lüfter aus. (PB3=0) If Ein_aus = 0 Then Abfrage_t1 If J > 4 Then Ausg_relais = 1 Ein_aus = 1 Wait T2 End If Elseif Ein_aus = 1 Then Abfrage_t1 If J > 4 Then Ausg_relais = 0 Ein_aus = 0 Alles_null Wait T2 End If End If End Sub Sub Abfrage_t1() 'fragt Taster 1 (den Ein/Ausschalter) ab J = 0 For I = 0 To 5 If Eing_ein_aus = 0 Then 'Eing_ein_aus ist 0 wenn Taster gedrückt J = J + 1 Waitms T1 End If Next I End Sub Sub Zeittaster() 'fragt Taster 2 (den Starttaster für Timer Nachlauf) ab J = 0 For I = 0 To 5 If Eing_tim = 0 Then J = J + 1 Waitms T1 End If Next I If J > 4 Then Zeit = 1 End If End Sub Sub Alles_null() 'hier werden alle Werte auf 0 zurückgesetzt, bzw. die Ausgänge abgeschaltet Ausg_relais = 0 Ein_aus = 0 Ausg_led = 0 Ausg_test = 0 Zeit = 0 Zaehl_imp_a = 0 Zaehl_imp_b = 0 End Sub End Gruss Theo
Ich weiß nicht ob man im BASCOM nachsehen kann wieviel vom SRAM schon statisch belegt ist. Aus eigener Erfahrung weiß ich nur das, wenn man etwas großzügig ist, die 64 Byte SRAM schnell voll sind. BASCOM ist was das anbelangt nicht sparsam.
Im simulator kommt ein Fehler " Frame overlap swstack " also $swstack auf 20 erhöhen dann ist der Fehler weg und sehe dir bitte in der Bascom Hilfe den Befehl " Debounce " an der könnte dein Konstruckt der Tasten entprellung evtl. vereinfachen
Hallo Zusammen, vielen Dank für die Tipps ! werde es nachher mal ausprobieren. @ vibra : ich habe mit dem Befehl "debounce" noch nichts gemacht; gehört / gelesen schon. Ich will das Programm, wenn es so erstmal läuft incl. der noch "richtig" aufzubauenden HW, Schritt für Schritt verbessern. Ich hab halt "auf die Schelle" 2 sec. Wait reingeschrieben, hat den Nachteil, dass, wenn man den Taster zu lange gedrückt helt, der Ausgang auch wieder abfällt ( auf Low geht) Wenn ich's erprobt habe, melde ich mich wieder. Gruss Theo
Hallo zusammen, ja, der $swstack war es. Wenn man den auf 20 setzt geht's. (wie's soll) Eine Frage habe ich aber noch : ich hab die Simmualtion versucht, da gibt's ja einen extra Button. Bei mir kommt da die Meldung : "OBJ and DGB file not found" Was bedeutet denn das ? Und : in der Hilfe von Bascom finde ich nix zu "Simmulation". Ist das Normal ? ich habe die Vollversion, also das, wofür man mal bezahlt hat. Könnt Ihr mir die Fragen noch beantworten ? Vielen Dank vorab! Gruss Theo
Einfach mal die Web site des Herstellers besuchen - da findet man doch alles ;-)
Du must in den Optionen die entsprechenden Ausgaben aktivieren. Die Hilfe zur Simulation findest Du unter " $SIM ".
:
Bearbeitet durch User
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.