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 ".
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.
