Archiv verlassen und diese Seite im Standarddesign anzeigen : Tiny12-Lauflicht will nicht
Hallo!
$regfile = "at12def.dat"
$crystal = 1200000
$tiny
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Eins:
Portb = 1
Waitms 200
Portb = 2
Waitms 200
Portb = 4
Waitms 200
Portb = 8
Waitms 200
Portb = 16
Waitms 200
Goto Eins
Bringt mir folgendes Ergebnis:
http://video.google.de/videoplay?docid=-8270141342921510491
Ich hab 10x mit Datenblatt meinen Schaltplan kontrolliert und kam zu dem Schluss, dass die Pinne in der richtigen Reihenfolge mit der LED-Zeile verbunden sind. Die linke ist LED1(für Informatiker 0). Die wird auch zuerst eingeschaltet. Aber danach wirds dann komisch. Ist der Fehler nun in der Software oder doch irgendwie in der Hardware?
Ich bin verzweifelt! :)
Keiner kann mir helfen? Oder ist die Frage einfach zu blöd?
Hi Goblin,
Dein Prog. sollte so laufen.
Sind die LED´s auch richtig angeschlossen?
Hast Du den Vorwiederstand richtig berechnet?
Kann Dein Prozessor den benötigten Strom treiben?
Das sind die Dinge die mir dazu einfallen.
Gruß
Rolf
naja wenn ich
portb = 255
mach, dann leuchten zumindest alle. das ist ja das was mich stutzig macht.
teslanikola
08.10.2006, 15:56
für mich ist der fehler klar: Das Programm macht was es soll nur du hast die LEDs an die Falschen Pins, somit stimmt die reihenfolge der LEDs nicht, Prüfe das nochmla nach
ich würde dir ja zustimmen, wenn ich das nicht schon einige male kontrolliert hätte..... aber nen vorschlag zur güte: ich werd mal nen schaltplan von meiner schaltung malen. das hilft meist. aber wenn da dann nen positives ergebnis bei rauskommt müsst ihr weiterrätseln! ;)
Hallo!, versuch doch mal den folgenden Code:
Ist nur mal eine Idee, habs nicht getestet.
$regfile = "at12def.dat"
$crystal = 1200000
$tiny
Config Portb.0 = Output 'Port setzt auf Augsgang
Config Portb.1 = Output 'Pin setzt auf Eingang !
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Eins:
Portb = 1
Waitms 200
Portb = 2
Waitms 200
Portb = 4
Waitms 200
Portb = 8
Waitms 200
Portb = 16
Waitms 200
Goto Eins
Viel Erfolg Bernd
Hi!
Hier der Schaltplan:
http://img406.imageshack.us/img406/9987/schaltplanll3.th.gif (http://img406.imageshack.us/my.php?image=schaltplanll3.gif)
@gandalf:
Nö, kommt das gleiche raus. Schade
Hi Gobblin,
ich hatte das gleiche Problem, als ich mit meinem ersten Projekt anfing!
Ich hab zwar einen 2313 eingesetzt aber mit etwas Modifikation geht das Prog ja auch für nen Tiny!
Lass dich nicht von der Größe des Listings schocken, mein Lauflicht hat unseren Weihnachtsbaum vorm Haus geschmückt und da wollte ich mehrere Lauflichtvarianten durchlaufen lassen!
Jetzt kommts:
'************************************************* *****************************
'Name : Lauflicht5x.bas
'Purpose : Lauflicht für Weihnachtsbaum
'Version : V0.02
'Compiler : BasCom AVR 1.11.7.4
'
'Hardware (1) LED's bzw. Schaltverstärker
' an PB0 bis PB5
' (2) Schalttaster zur Hand/Auto- Steuerung
' an PD0 und PD1
'
'Chiptyp : AT90S2313
'************************************************* *****************************
$regfile = "2313def.dat" 'AT90S2313
$crystal = 4000000 'Quarz-Frequenz
Config Portb = Output 'PBx als Ausgänge
Config Portd = Input 'PDx als Eingänge
Dim W As Byte 'W= Werte in Lauflicht lesen
Dim I As Byte 'I= Schleife für 1 Durchgang
Dim J As Byte 'J= Vieviel mal Schleife
Dim Z As Byte 'Z= Zählerwert
Z = 1
Dim D As Byte
D = 20 'D= Anzahl der Schleifen
Dim T As Integer 'T= Taktzeit
T = 200
Portb = 63 ' alle Ports EIN
Wait 60 ' 60 sec Vorheizen
Auto:
Do
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Vor1
For I = 1 To 5
Read W
Portb = W
Waitms T
Next I
Next J
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Rueck1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 5 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Neg1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 5 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Neg2 'Zeiger auf Beginn der Daten setzen
For I = 1 To 5 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Add1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 10 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Wechs1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 12 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Kllauf1 'Zeiger auf Beginn der Daten setzen
For I = 1 To 3 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Waitms T
Next I
Next J
For J = 1 To D
If Pind.1 = 1 Then
Goto Hand: 'Hand/Auto- Ebene
End If
Restore Ende 'Zeiger auf Beginn der Daten setzen
For I = 1 To 2 'Lese nächsten Wert
Read W 'Setze Port
Portb = W
Wait 1
Next I
Next J
Loop
End
'+++++++++++++++++++++++++++++++++++++++++++
' Daten für verschiedene Lauflichtfunktionen
'+++++++++++++++++++++++++++++++++++++++++++
Vor1:
Data 33 , 34 , 36 , 40 , 48, '6 12345 einzenl vorwärts
Rueck1:
Data 48 , 40 , 36 , 34 , 33, '6 54321 einzeln rückwärts
Neg1:
Data 62 , 61 , 59 , 55 , 47, '6 12345 negiert einzeln
Neg2:
Data 47 , 55 , 59 , 61 , 62, '6 54321 negiert einzeln
Add1:
Data 32 , 33 , 35 , 39 , 47 , 63, '6 12345 addierend
Data 62 , 60 , 56 , 48 , '6 12345 subtrahierend
Wechs1:
Data 32 , 33 , 49 , 51 , 59 , 63, '6 1-15-152-1524-15243
Data 32 , 63 , 32 , 63 , 32 , 63, '6 3xalle
Kllauf1:
Data 37 , 42 , 52, '6 13-24-35
Ende:
Data 31 , 32, '6 12345 im Wechsel
Hand:
If Pind.1 = 0 Then
Goto Auto:
End If
If Pind.0 = 0 Then
Z = Z * 2
End If
If Z > 32 Then
Z = 1
End If
Portb = Z
Wait 1
Goto Hand:
Such Dir halt das Stück raus, welches Du für die einfach Funktion brauchst!
Wenn Du Fragen hast, meld Dich halt noch mal!
P.s.: Cooles Video!!!
Schönes Wochenende noch!
Ähhh, noch was!
Hab hier noch ein vereinfachtes Listing gefunden, was ich mal in einer XBox verbaut habe!
Hat 8 Kanäle (kannste ja auf 4 reduzieren) und läuft nur vorwärts und rückwärts mit der Random Funktion (also zufällig)
'************************************************* ***********
'Name : X-Box Logo.bas
'Purpose : Beleuchtung Lauflicht um das Logo
'Version : V0.01
'Compiler : BasCom AVR 1.11.7.4
'Hardware : LED's an PB 0-7
'Chip type : AT90S2313
'History
'************************************************* ***********
$regfile = "2313def.dat" 'AT90S2313
$crystal = 4000000
Ddrd = &B1111111 '7 Ausgänge PortD auf Masse
Config Portb = Output 'Pin PB0-7 Ausgang
Dim A As Byte
Dim I As Byte
Dim J As Byte
Dim K As Integer
Do
K = Rnd(15)
For J = 1 To K
Restore Vor
For I = 1 To 8 'Lese nächsten Wert
Read A 'Setze Port
Portb = A
Waitms 80
Next I
Next J
K = Rnd(15)
For J = 1 To K
Restore Rueck
For I = 1 To 8 'Lese nächsten Wert
Read A 'Setze Port
Portb = A
Waitms 80
Next I
Next J
Loop
Vor:
Data 254 , 253 , 251 , 247 , 239 , 223 , 191 , 127, '8 12345678 einzeln
Rueck:
Data 127 , 191 , 223 , 239 , 247 , 251 , 253 , 254 '8 87654321 einzeln
So... mehr hab ich aber jetzt nicht dazu!
MMM Sorry, danke für deine Mühe, aber mir gehts weniger um das Lauflicht (was ich in kürzester Zeit auf zig verschiedene Arten proggen könnte), sondern darum dass der Tiny nicht tut, was er soll. Und das sollte er, weil ich das Miniboard nämlich zum Assembler lernen benutzen wollte...
magnetix48
08.10.2006, 19:38
Hallo Goblin,
bin zwar nicht der große Bascom-Spezialist, aber meiner Ansicht nach muss es am Anfang deines Programms nicht Config Pinb.0... sondern Config Portb.0... heißen.
Gruß
Detlef
Dein Schaltplan sieht vernünftig aus, wenn Du den internen Quarz benutzt - nur R1 mit 1k Pullup für Reset .. wären nicht besser typ. 10k plus ein 100n gegen Masse ... auch sollte der 7805 am Eingang und Ausgang ein C mit 100n gegen Masse haben !! ...
Dann noch die Frage, hast Du im Code die richtige Frequenz eingestellt F_CPU und Compilierst für den richtigen Proz, inkl ProgPony fürs richtige AVRlein ... ....
linux_80
08.10.2006, 20:07
Welche der LEDs gehen denn da jetzt nicht, sind ja nur zwei die nix tun ?
Evtl. kann man mal das Hex-file anschauen, ob bascom da evtl. irgendwelche Einstellungen vornimmt, die dann zu einer anderen Verwendung der Pins hinauslaufen. :-k
linux_80
08.10.2006, 20:16
Da haben wir es schon,
der Tiny 12 hat ja kein SRAM, was ja mit dem $tiny schon angedeutet wird, in der Hilfe steht auch schon, das trotzdem nicht alles läuft.
Und so schauts auch aus, denn die Wait-funktion will etwas auf dem Stack sichern, den es ja nicht gibt !
Evtl. mal eine eigene Warteschleife probieren.
Edit: was ein AVR macht bei Befehlen, die er eingentlich nicht kennt(Push & Pop), weiss ich dann auch nicht !
noch'n Edit:
Was mich im DB wundert, beim Befehl RET steht bei Operation:
PC <- STACK !!
Immerhin gibts RET und RCALL, also muss er mind. 2 Byte Stack haben :-k
Oder wie geht das ohne SRAM ? :-k
€3: DB hilft,
also der Tiny hat einen Hardwarestack, der für 3 Ebenen Platz hat (also 3 RCALLs zB. ineinander), und nur für RCALL und Interrupts verwendet werden kann.
grrrml! ich weiss jetzt woran es liegt. eine hauchduenne verbindung zwischen 2 pins. hab ich per durchgangspruefer und lupe entdeckt. jetzt funzt das teil natuerlich wie gewollt.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.