• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Binär Ausgabe mit 3 LED und Attiny13

Uranus

Geocacher
Moin moin erstmal :)

Nachdem Ich festgestellt hab das die Koords klein sind und eine passende Station gefunden wurde, passt Binär am Besten.

Zur Verfügung stehen 3 Led und ein ATTiny13.

Ausgelöst werden soll über Taster (Schließer).

Es müssen also mal 1 Led Leuchten mal 2 usw.

Hab jetzt das Forum durchgelesen aber nix Passendes gefunden, Upigors hab Ich auch schon um Rat gebeten, ein Script wie das 7 Segment scheint zwar Logisch...aber Ich schau da abzulut nicht durch .

Weiß da einer Abhilfe oder hat ein Passendes Script was ich anpassen kann?
 

l3berwurst

Geocacher
Ich kenn das Script nicht, aber such doch den Befehl, welcher die Taste abfragt. Passiert aber wahrscheinlich als Interruppt. Dann brauchst Du das nicht.

Danach den Befehl um die Ports an und auszuschalten...
Einen Pausenbefehl..
Der Rest ist Copy und Paste.
 
OP
U

Uranus

Geocacher
Genau daran liegt ja das Problem, hab gerade erst damit angefangen. Den Programmer hab ich selbst gelötet, USP-ISP Verbindung unter WIn8 läuft auch. Das erste was Ich hinbekommen hab war ein Morse Code, der Funzt auch einwandfrei. Nur jetzt solls Kniffiliger werden- und beim Programmieren stopt es gerade :)
 

l3berwurst

Geocacher
Morse hat doch alles was du brauchst.
Leds ansteuern und Verzögerungen.
Musst nur die Ports abändern und anstatt eine Led mehrere Gleichzeitig ein und ausschalten.

Machst du in C oder Bascom?
 
OP
U

Uranus

Geocacher
Aber wie ändere ich die Ports bzw wie bringe ich sie dazu das mal 2 LED leuchten , mal 3 usw ?

bascom
 

l3berwurst

Geocacher
Ich mach eigentlich in C.
In Bascom wird es wohl so aussehen.
Über den Schalter kannst Du der Einfachheit halber die Versorgungsspannung laufen lassen.
Dann hast Du nix mit Sleepmodes zu tun und sparst auf einfachste Weise Strom.
Es geht aber auch eleganter.

Einfach die nachfolgenden Codeschnipsel so kopieren wie Du sie brauchst.

4 LEDs an und ausschalten lassen:
$regfile = "ATtiny13.DAT"
$crystal =128000 'Hier Frequenz aus Fusebits angeben
Config Portb = &B00001111 'Pinb.0...3 Ausgang Rest Eingang Zählweise:0 ist hinten
Waitms 50 'Warte xxx Millisekunden
Do
Portb.0 = 1 'LED an Port b.x AN
Portb.1 = 1 'LED an Port b.x AN
Portb.2 = 1 'LED an Port b.x AN
Portb.3 = 1 'LED an Port b.x AN
Waitms 900 'Warte xxx Millisekunden
Portb.0 = 0 'LED an Port b.x AUS
Portb.1 = 0 'LED an Port b.x AUS
Portb.2 = 0 'LED an Port b.x AUS
Portb.3 = 0 'LED an Port b.x AUS
Waitms 500 'Warte xxx Millisekunden
Loop


google mal
mikrocontroller attiny13 bascom
Oder lade Dir das Reaktivlichtkochbuch runter.
Das ist auch Bascom.
 

l3berwurst

Geocacher
Es wäre außerdem schlau, die LEDs einzeln, aber so schnell hintereinander zu schalten, dass es aber so aussieht als wären alle gleichzeitig an.
Das würde noch einmal 3/4 Strom sparen und der Attiny wird nicht überlastet.

etwa so:

Do
For A = 1 To 500 'Teil bis Zeile Next A 500 mal wiederholen
Portb.0 = 1 'LED an Port b.x AN
Waitms 2 'warte xxx Millisekunden
Portb.0 = 0 'LED an Port b.x AUS
Portb.1 = 1 'LED an Port b.x AN
Waitms 2 'warte xxx Millisekunden
Portb.1 = 0 'LED an Port b.x AUS
Portb.2 = 1 'LED an Port b.x AN
Waitms 2 'warte xxx Millisekunden
Portb.2=0 'LED an Port b.x AUS
Portb.3= 1 'LED an Port b.x AN
Waitms 2 'warte xxx Millisekunden
Portb.3 = 0 'LED an Port b.x AUS
Next A 'zurück zu For schleife Anfang bis xxx mal wiederholt

Waitms 600 'warte xxx Millisekunden
Loop
 

TeamAdolzfurt

Geomaster
Machs nicht so kompliziert. Moderne (helle) LED sind mit 1mA mehr als deutlich zu sehen (Vorwiderstand anpassen, 1k geht problemlos). Der Tiny kann 40mA pro Port, keinerlei Problem. Batterielebensdauer ist auch kein Problem, der Energieverbrauch ist zu vernachlässigen (das sind ein paar Sekunden am Tag, wenn überhaupt)
 
OP
U

Uranus

Geocacher
Aber wie bringe ich sie dazu gleichzeitig an zu gehen?

An PP0 soll LED1, an PB1 LED 2 , an PB2 LED 3,

Der Taster an PB4, kann Ich den ohne weiters gegen Masse Schalten?
 

l3berwurst

Geocacher
In der Zeile oben
Config Portb =&00001111
Ist definiert worden, dass port 4 eij eingang ist. Da muss ein Plus drauf, damit der attiny das erkennt.

Um das abzufragen brauchst Du eine IF Abfrage.

If Portb.4 = 1 Then
Portb.3=1
Else
Portb.3=0
End if

Ich lerne noch Bascom. Ihhh :grin:

Lass über den Schalter die Versorgungsspannung zum Chip auf den VCC Pin laufen. Du schaltest den dann einfach nur ein und er rennt los.
Sonst brauchst Du den Schlafmodus, weil der Attiny nicht abschalten würde.
Die If Abfrage brauchst Du dann auch nicht.
 
OP
U

Uranus

Geocacher
hmm das würde glaub Ich nicht gehen, dann müssen die Taster ja durchgängig gedrückt werden.

Mit Schlaf Modus ist schon besser, ist ja dann Ähnlich wie Beim Morse Blinker.

Auslösen und er Blinkt los, dann Stopt er und wartet bis der Nächste auslöst.
 
OP
U

Uranus

Geocacher
So hab jetzt den Morse Code genommen und ein wenig Rumgespielt. Proplem nur der ist ja auf ne LDR abgestimmt, was muss Ich denn Löschen damit nur die Auslösung Über Taster geht? Jetzt Blinkt er dauerhaft :???:

Und wieso Schaltet der Attiny nur ca 1,5 Volt an jeden Pin Durch :???:

Hier der Code den Ich jetzt gerade hab nur eben mit LDR

Code:
$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "ATtiny13.DAT"
$crystal = 128000                                           'Frequenz des internen Oszillators

Config Adc = Single , Prescaler = Auto
Config Portb = &B00001000                                   'Pinb.3 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0                                                   'Ausgänge auf Low setzen
Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen
Wdtcr = &B11010011                                          'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
Enable Interrupts                                           'Interrupts freigeben
Const Schwelle = 800                                        'je größer der Schwellwert, desto unempfindlicher
Const Tagschwelle = 800                                     'Schwellwert für Schlafmodus
Const Zwangsimpuls = 0                                      'LED-Impuls tagsüber alle X Schlafyklen (á ca. 8 Sekunden)
Dim A As Byte                                               'Variablen definieren
Dim Tagzaehler As Byte
Dim Schlafzaehler As Byte
Dim Ldr As Integer                                          '0 = Dunkel, 1023 = Hell
Dim Alt As Integer
Dim Merker As Integer
Dim Zeichen As String * 1
Do
Reset Watchdog
Powerdown                                                   'prozessor bremsen da sonst lichtänderung nicht erkannt wird
Start Adc                                                   'A/D-Wandler starten
Ldr = Getadc(2)                                             'Helligkeitswert einlesen
Stop Adc                                                    'A/D-Wandler zum Stromsparen wieder stoppen
Merker = Ldr - Alt                                          'Unterschied zwischen letzter und aktueller Messung ermitteln
Alt = Ldr                                                   'letzten LDR-Wert sichern
If Merker > Schwelle Then Gosub Morsen                      'Bei großer Änderung Dunkel->Hell: Blinken
If Ldr > Tagschwelle Then                                   'prüfen ob helligkeit über tagschwelle liegt
   If Tagzaehler < 255 Then                                 'int-variable geht nur bis 255
      Tagzaehler = Tagzaehler + 1
   End If
Else
   Tagzaehler = 0                                           'wenn wieder dunkel tagzähler löschen
End If
If Tagzaehler > 200 Then Gosub Pause                        'wenn mehr als x zyklen hell dann schlafmodus
Loop
Pause:
Wdtcr = &B11110001                                          'Watchdog auf 8 Sekunden stellen
Reset Watchdog
Powerdown
Wdtcr = &B11010011                                          'Watchdog wieder auf 0,125 Sekunden zurückstellen
Return
Morsen:
Restore Daten
Alt = 1023                                                  'Doppelauslösung verhindern
Do
 Read Zeichen
 Wdtcr = &B11010100
 If Zeichen = "4" Then Gosub Led4                           'Watchdog auf 250ms stellen
 If Zeichen = "1" Then Gosub Led1
 If Zeichen = "2" Then Gosub Led2
 If Zeichen = "3" Then Gosub Led3
 If Zeichen = " " Then Gosub Leer
 If Zeichen = "5" Then Gosub Led5
 Wdtcr = &B11010011                                         'Watchdog wieder auf 125ms stellen
 If Zeichen = "X" Then Return
 Loop
Led4:
Portb.0 = 1
Portb.1 = 1
Reset Watchdog
Powerdown
Portb.0 = 0
Portb.1 = 0
Reset Watchdog
Powerdown
Return
Led1:
Portb.2 = 1
Reset Watchdog
Powerdown
Portb.2 = 0
Reset Watchdog
Powerdown
Return
Led2:
Portb.1 = 1
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Portb.1 = 0
Reset Watchdog
Powerdown
Return
Led3:
Portb.0 = 1
Reset Watchdog
Powerdown
Portb.0 = 0
Reset Watchdog
Powerdown
Return
Led5:
Portb.0 = 1
Portb.2 = 1
Reset Watchdog
Powerdown
Portb.0 = 0
Portb.2 = 0
Reset Watchdog
Powerdown
Return
Leer:
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Return
End
Daten:
Data "1" , " " , " " ,
Data "4" , " " , " " ,
Data " " , " " , "3" ,
Data " " , " " , " " ,
Data "4" , " " , " " ,
Data " " , "2" , " " ,
Data " " , " " , " " ,
Data "5" , " " , "" ,
Data "4" , " " , " " ,
Data " " , " " , "3" ,
Data "4" , " " , " " ,
Data "5" , " " , " " ,
Data " " , " " , " " ,
Data " " , " " , " " ,
Data " " , " " , " " ,
Data " " , " " , " " ,
Data " " , " " , " " ,
Data " " , " " , " " ,
Data " " , " " , " " ,
Data "X"
 
OP
U

Uranus

Geocacher
Gut das Dauer Blinken ist aus, hatte vergessen den Wiederstand von Pin3 nach GND zu machen.. :kopfwand:

Jetzt nur noch das Proplem mit der 1,5 V an den Pins
 
OP
U

Uranus

Geocacher
4,5 Volt Block, hab auch 3 mal 1,5 in reihe genau das gleiche.

Bei den Morse Licht geht das, da schaltet er voll durch und die led leuchtet schön helle
 

l3berwurst

Geocacher
In Deiner Zeile 6...
Congig Portb =0b00001000
Schaltest Du nur einen Ausgang frei.
Der Rest sind Eingänge.

Mach mal da alle Ports an denen eine LED hängt auf 1
 
OP
U

Uranus

Geocacher
Ok und was muss ich da eintippen?

Code:
Config Portb = &B00001000                  'Pinb.3 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0                                                   'Ausgänge auf Low setzen

Hab mir schon so was gedacht :???:
 

l3berwurst

Geocacher
Die zählweise ist binär. Also von hinten nach vorne.

0b00000001 port 0 ist ausgang
0b00001111 port 0...3 ist ausgang
0b00100111 port 5 und 0...2 sind ausgänge
0b10000000 port 7 ist ausgang (gibts nicht bei dem Attiny, dient nur der Verdeutlichung)
 
OP
U

Uranus

Geocacher
Ah so langsam kommt licht ins Dunkle.

Also muss bei mir stehen

Code:
Config Portb = &B00000111                                    'Pinb.0 -2 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0

Richtig?
 
Oben