Hallo, nachdem ich hier schon einige Zeit lesend im Forum unterwegs bin habe ich mich nun angemeldet. Habe im Forum und auch aus Büchern schon viele Infos gefunden. Nun habe ich mich dran gewagt und ein erstes kleines Programm geschrieben. Die Grundfunktion funktioniert im Prinzip; nur macht das Programm nach dem starten nicht ganz das was es soll. Das Programm mit Attiny13 soll auf Tastendruck drei verschiedene Spannungen nacheinander einschalten (Durch LEDs simuliert) und auf einen weiteren Knopfdruck im umgekehrter Reihenfolge wieder ausschalten. (Soll mal ein komfortabler Adapter zum auslesen von 2708 und 2704 Eproms werden)Nun habe ich folgende Probleme: Die Leds werden zwar vorschriftsmäßig der Reihe nach geschaltet allerdings im umgekehrtem Sinne: Zuerst ausgeschaltet, danach eingeschaltet. (Sollte umgekehrt sein) Zweites Problem: Der Taster wird ignoriert. Beim einschalten leuchten die drei Leds und werden dann der Reihe nach ausgeschaltet. Beim einschalten sollten die Leds nicht brennen; das Programm erst starten nachdem der Taster gedrückt wurde. Das Programm sollte die Leds erst wieder ausschalten nachdem der Taster ein zweites Mal gedrückt wurde. Aktuell läuft das Programm in einer Endlosschleife durch. Die Leds werden sofort wieder eingeschaltet. Das reicht natürlich nicht um ein Eprom auszulesen. Hab schon versucht die Parameter zu negieren und einen Stop mit Bit Stop zu erreichen. Bit Stop hat zwar funktioniert; das Programm stoppte nach dem aufleuchten der drei Leds (würde dem Eprom nicht gut bekommen) ließ sich aber durch Tastendruck nicht zum weiterlaufen überreden. Das Programm ist mit Bascom erstellt und hab keine Fehlermeldungen bekommen. Doch irgendwas hab ich vermutlich vergessen! Wer kann mit Tips geben? Hab das Prog mal als TXT-Datei angehängt. Viele Grüße Mayka
Mayka G. schrieb: > Hab das Prog mal als TXT-Datei angehängt. Wenn du hier schon öfter mitgelesen hast, dann solltest du eigentlich keine TXT Datei angehängt haben, sondern das .BAS Tipp: Ich bin zwar kein Bascom Spezi, aber du solltest dir ein Unterprogramm machen, was auf einen Tastendruck wartet. Das springst am Anfang und nach jeden Setzen eines Pins wieder an, das geht mit GOSUB in Basic.
Hallo, danke das werde ich gleich morgen probieren. Ursprünglich wollte ich das Programm als farbiges jpg anhängen wie es hier viele tun, habe noch nicht herausgefunden wie das geht. Die .bas Datei ist kein Problem! Gruß Mayka
@Mayka Greschner (mayka) >Hallo, danke das werde ich gleich morgen probieren. Ursprünglich wollte >ich das Programm als farbiges jpg anhängen wie es hier viele tun Damit du dir wie diese andere Deppen eine Watschen abholen kannst? Quelltexte heißen nicht umsonst so. Es sind TEXTdateien, die man einfach DIREKT als Anhang beifügt! Quelltext als Bild ist Unsinn!
Ich würde das Programm mal simulieren oder debuggen. Dann kann man nämlich Schritt für Schritt nachvollziehen was der Prozessor draus macht. Alle Fehler kann der Compiler nämlich nicht erkennen.
Mayka G. schrieb: > Die Leds werden zwar vorschriftsmäßig der Reihe nach geschaltet > allerdings im umgekehrtem Sinne: Zuerst ausgeschaltet, danach > eingeschaltet. (Sollte umgekehrt sein) Wie sind die LEDs an die Portpins angeschlossen? Was machen die dort angeschlossenen LEDs, wenn 5V am Pin herauskommen, und was machen sie, wenn 0V herauskommen? > Das Programm sollte die Leds erst wieder ausschalten nachdem der Taster > ein zweites Mal gedrückt wurde. Dann solltest du da auch für die zweite Stelle, wo "PINB.4 = 1" vorkommt eine Abfrage und keine Zuweisung vorsehen...
:
Bearbeitet durch Moderator
Man kann den Quelltext auch direkt angeben (mit den code Tags). Wenn man ihn dann noch schöner formatiert, sieht das z.B. so aus:
1 | $regfile = "attiny13.dat" 'Einschaltverzögerung |
2 | $hwstack = 22 |
3 | $swstack = 8 |
4 | |
5 | Config Portb.0 = Output |
6 | Config Portb.1 = Output |
7 | Config Portb.2 = Output |
8 | Config Portb.3 = Output |
9 | Config Portb.4 = Input |
10 | Config Portb.5 = Output |
11 | PortB.4 = 1 |
12 | Taster1 Alias Pinb.4 |
13 | Config Taster1 = Input |
14 | Config Debounce = 50 |
15 | |
16 | Do |
17 | Portb = 0 |
18 | If PINB.4 = 1 Then 'Taste drücken |
19 | Wait 1 'Warten 1sec |
20 | Portb.0 = 1 '-5 Volt ein |
21 | Wait 2 'Warten 2 sec |
22 | Portb.1 = 1 'Programmer ein |
23 | Wait 2 'Warten 2 sec |
24 | Portb.2 = 1 '+12 Volt ein |
25 | PINB.4 = 1 'Taste drücken |
26 | Wait 1 'Warten 1sec |
27 | PORTB.2 = 0 '+12 Volt aus |
28 | Wait 2 'Warten 2 sec |
29 | PORTB.1 = 0 'Programmer aus |
30 | Wait 2 'Warten 2 sec |
31 | PortB.0 = 0 '-5 Volt aus |
32 | End if |
33 | Loop |
Was macht eingentlich der Befehl 'Portb = 0'? Setzt der alle Bits auf 0, auch Bit 4?
Lothar M. schrieb: > Dann solltest du da auch für die zweite Stelle, wo "PINB.4 = 1" vorkommt > eine Abfrage und keine Zuweisung vorsehen... Ich bin zwar jetzt nicht der große Bascom Kenner, aber Bascom erkennt wohl ob ein '=' als Zuweisung oder Vergleich (if-Zweig) gemeint ist. Siehe: http://rn-wissen.de/wiki/index.php?title=Bascom_Verzweigungen#Verzweigung:_If-Then-Else
2⁵ schrieb: > Was macht eingentlich der Befehl 'Portb = 0'? Setzt der alle Bits auf 0, > auch Bit 4? alle Portpins auf L, am 4 wird der interne pullup ausgeschaltet mayka, zeig mal das schaltbild
Lothar M. schrieb: > Dann solltest du da auch für die zweite Stelle, wo "PINB.4 = 1" vorkommt > eine Abfrage und keine Zuweisung vorsehen... Basic trennt vernünftig zwischen Zuweisungen und Boolschen Ausdrücken. In einer Abfrage gibt es keine Zuweisung.
Hallo, hier mal der vereinfachte Schaltplan ohne die Spannungsversorgung als Anhang. Die Leds sind hier schon durch einen uln2003 und den dazugehörenden Relais für die Spannungszuschaltung ersetzt. Das mit dem PortB = 0 habe ich versuchsweise auf die zu den Leds gehörenden Pins begrenzt; das hat leider nichts am Ablauf geändert. Da muß ich nochmals drüber brüten! Gruß Mayka
:
Bearbeitet durch User
W.A. schrieb: > In einer Abfrage gibt es keine Zuweisung Deshalb meine Anmerkung zur Zuweisung und Abfrage: > If PINB.4 = 1 Then 'Taste drücken >... > PINB.4 = 1 'Taste drücken Wer findet den Unterschied? Und: warum ist da ein Unterschied, wo doch der gleiche Kommentar da steht? .
Vergleich mal deine Plan mit dem im Link. Fällt dir was auf? http://www.loetstelle.net/projekte/relaiskarte/relaiskarte.php
Mayka G. schrieb: > Zweites Problem: Der Taster wird ignoriert. Du brauchst einen "Merker", der sich merkt, daß die Taste gedrückt wurde. Der muß gesetzt werden, wenn die Taste das erste Mal betätigt wurde. Das Programm muß diesen Merker abfragen. Ist er gesetzt, (d.h. jemand hat die Taste gedrückt und wieder losgelassen) dann wird der erste Teil (die Spannungen nacheinander einschalten) ausgeführt und als Letztes in diesem Zweig der Merker wieder gelöscht. Nun wird der Taster in einer Schleife wieder abgefragt. Wird er gedrückt, wird wieder der Merker gesetzt, der 2. Teil (Spannungen abschalten) ausgeführt und als Letztes wieder der Merker gelöscht. Dann wieder von vorne. Lothar M. schrieb: > Deshalb meine Anmerkung zur Zuweisung und Abfrage: >> If PINB.4 = 1 Then 'Taste drücken >>... >> PINB.4 = 1 'Taste drücken > Wer findet den Unterschied? > Und: warum ist da ein Unterschied, wo doch der gleiche Kommentar da > steht? Sie hat wohl zum Ausprobieren die Taste mit der Zuweisung PINB.4 = 1 "festgeklemmt". -Feldkurat-
Die Schaltung kann so nicht funktionieren. Der ULN2003 schaltet eine Last nur gegen GND. Zum Code ein Vorschlag:
1 | Do |
2 | Portb = 0 |
3 | If PINB.4 = 1 Then 'Taste drücken |
4 | Wait 1 'Warten 1sec |
5 | Portb.0 = 1 '-5 Volt ein |
6 | Wait 2 'Warten 2 sec |
7 | Portb.1 = 1 'Programmer ein |
8 | Wait 2 'Warten 2 sec |
9 | Portb.2 = 1 '+12 Volt ein |
10 | End if |
11 | If PINB.4 = 1 Then 'Taste drücken |
12 | Wait 1 'Warten 1sec |
13 | PORTB.2 = 0 '+12 Volt aus |
14 | Wait 2 'Warten 2 sec |
15 | PORTB.1 = 0 'Programmer aus |
16 | Wait 2 'Warten 2 sec |
17 | PortB.0 = 0 '-5 Volt aus |
18 | End if |
19 | Loop |
Einfach mal ausprobieren...
:
Bearbeitet durch Moderator
Hallo, bin wieder da! Zunächst mal vielen Dank für die Tipps. @ Cerberus: Richtig! Da habe ich das Datenblatt falsch interpretiert; bin davon ausgegangen das die Spannung die am Pin 9 anliegt über die Relais gen Masse geschaltet wird. Ist genau umgekehrt, die Masse liegt an den anderen Pins des ULN. Allerdings wird der ULN vermutlich nicht zum Einsatz kommen, da zu groß. Die Lösung mit drei SMD Transistoren ist um ein vielfaches kleiner. Der Adapter soll ja möglichst klein ausfallen. @ Miller: Den Ratschlag mit der Ergänzung IF habe ich ausprobiert und keine Änderung im Verhalten festgestellt. Darum werde ich noch mal von ganz vorne anfangen; das Programm ganz neu machen. Ich habe auch eine andere Variante eingebaut die ich im Netz gefunden habe (Mit Taster LED ein und wieder ausschalten) die noch schlechter funktioniert hat. Wie ich mittlerweile festgestellt hab gibt es da mehrere Möglichkeiten um Taster zu implementieren; die werde ich der reihe nach durchprobieren. Gruß Mayka
So, ein Problem wäre gelöst: Die Leds sind jetzt beim einschalten aus und gehen der Reihe nach an. (Vorher war es umgekehrt) Ich habe bei Onkel Google nach dem Fehlerbild gesucht und einige Leute gefunden die das gleiche Problem haben. Die Threads durch gelesen und festgestellt das alle diese Leute eines gemeinsam haben: Sie benutzen alle ein STK500. Daraufhin die Unterlagen für das STK500 besorgt (ich hab keine da gebraucht gekauft)und festgestellt, das sowohl Leds als auch die Taster auf dem STK500 invertiert angesprochen werden. Deswegen haben die geleuchtet wenn sie aus sein sollten; und waren aus als sie an sein sollten. Es lag an der Hardware, nicht an der Software. Das Programm an das STK500 angepasst und die Leds tun nun was sie sollen. Lediglich die Anpassung des Tasters hat (noch) nicht funktioniert. Das bekomm ich auch noch hin. Gruß Mayka
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.