Forum: Mikrocontroller und Digitale Elektronik Wer kann mir weiter helfen?


von Mayka G. (mayka)


Angehängte Dateien:

Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Mayka G. (mayka)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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!

von Cerberus (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von 2⁵ (Gast)


Lesenswert?

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?

von 2⁵ (Gast)


Lesenswert?

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

von Charly B. (charly)


Lesenswert?

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

von W.A. (Gast)


Lesenswert?

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.

von Mayka G. (mayka)


Angehängte Dateien:

Lesenswert?

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
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

.

von Cerberus (Gast)


Lesenswert?

Vergleich mal deine Plan mit dem im Link. Fällt dir was auf?
http://www.loetstelle.net/projekte/relaiskarte/relaiskarte.php

von Feldkurat K. (feldkurat)


Lesenswert?

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-

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Mayka G. (mayka)


Lesenswert?

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

von Charly B. (charly)


Lesenswert?

vom taster muss ein widerstand nach plus, sagen wir mal 1K

von Mayka G. (mayka)


Lesenswert?

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
Noch kein Account? Hier anmelden.