Forum: Mikrocontroller und Digitale Elektronik Attiny 13 Programmierung


von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

Hallo und guten Abend,

ich habe eine kleines Problem.
Ich hbae hier ein Programm, welches über einen Attiny 13 eine LED 
blinken lässt, wenn auf einen LDR Fotowiderstand Licht fällt. Die LED 
ist an den PortB3 angeschlossen. Zusätzlich will ich jetzt aber 
gleichzeitig eine zweite LED die an PortB1 angeschlossen ist, blinken 
lassen.
Ich habe hierzu folgenden Basic Code...
1
$regfile = "ATtiny13.DAT"
2
$crystal = 16000                                            'Frequenz des  internen Oszillators
3
$hwstack = 2                                                'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
4
    
5
Config Adc = Single , Prescaler = Auto
6
Config Portb = &B00001000                                   'Pinb.3 auf 'Ausgang', Rest auf 'Eingang' schalten
7
Portb = 0                                                   'Ausgänge auf Low setzen
8
Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen
9
10
Wdtcr = &B11010011                                          'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
11
Enable Interrupts                                           'Interrupts freigeben
12
13
Const Tagschwelle = 800                                     'Schwellwert für Schlafmodus
14
Dim Ldr As Integer                                          '0 = Dunkel, 1023 = Hell
15
16
Do
17
 Gosub Pause
18
 Start Adc                                                  'A/D-Wandler starten
19
 Ldr = Getadc(2)                                            'Helligkeitswert einlesen
20
 Stop Adc                                                   'A/D-Wandler zum Stromsparen wieder stoppen
21
 If Ldr <= Tagschwelle Then
22
  Gosub Blinken                                             'Bei großer Änderung Dunkel->Hell: Blinken
23
 End If
24
Loop
25
26
Blinken:                                                    'LED blinken lassen
27
  Portb.3 = 1
28
  Reset Watchdog
29
  Powerdown
30
  Portb.3 = 0
31
Return
32
33
Pause:
34
 Wdtcr = &B11110001                                         'Watchdog auf 8 Sekunden stellen
35
 Reset Watchdog
36
 Powerdown
37
 Wdtcr = &B11010011                                         'Watchdog wieder auf 0,125 Sekunden zurückstellen
38
Return
39
40
End


Wie kann ich das realisieren das die zweite LED an PortB1 auch mit 
blinkt.

Kann da jemand weiter helfen.

vielen Dank und viele Grüße
funeddy

: Verschoben durch Moderator
von Quarter Beck (Gast)


Lesenswert?

Da musst Du Portb.1 das Gleiche machen lassen, wie Portb.3

Blinken:                                        'LED blinken lassen

  Portb.3 = 1
  Portb.1 = 1



  Reset Watchdog

  Powerdown

  Portb.3 = 0
  Portb.1 = 0

Return

Print "Mit freundlichem Gruss!"

von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

Danke für die Hilfe,

habe jetzt folgenden Code Probiert
1
Blinken:                                                    'LED blinken lassen
2
  Portb.3 = 1
3
  PORTB.1 = 1
4
  Reset Watchdog
5
  Powerdown
6
  Portb.3 = 0
7
  PORTB.1 = 0
8
Return

Leider funktioniert dann garnix mehr. Weder die eine noch die andere LED 
blinkt.
Weißt Du da weiter ?

Vielen Dank und Viele Grüße
funeddy

von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

Habe jetzt den Code nochmal geprüft, es funktioniert leider nicht
Ich habe jetzt folgenden Code
1
Blinken:                                                    'LED blinken lassen
2
  Portb.3 = 1
3
  Portb.1 = 1
4
  Reset Watchdog
5
  Powerdown
6
  Portb.3 = 0
7
  Portb.1 = 0
8
Return

ich weiß auch nicht warum das nicht funktioniert.
Vlt. muss der PortB.1 auch auf

Config Portb = &B00001000                                   'Pinb.3 auf 
'Ausgang', Rest auf 'Eingang' schalten

Ich habe die Vermutung das ich Pinb.1 auch auf ausgang setzen muss.

vielen Dank für die Hilfe
VG funeddy

von Quarter Beck (Gast)


Lesenswert?

Joerg D. schrieb:

> Vlt. muss der PortB.1 auch auf
>
> Config Portb = &B00001000                                   'Pinb.3 auf
> 'Ausgang', Rest auf 'Eingang' schalten
>
> Ich habe die Vermutung das ich Pinb.1 auch auf ausgang setzen muss.

Da habe ich sogar Gewissheit.
:)

von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

ich habe das jetzt mit Portb.1=output und Portb.3=output probiert.
Kannst Du mir kurz schreiben wie das Binär geht. Das geht aber auch 
nicht.

also z.B. Config Portb = &B00001000 wäre nur der Portb.3 wie sieht es 
dann aus wenn der Portb.1 dazu kommt.

vielen Dank für die Hilfe

Vg funeddy

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Joerg D. schrieb:
> ..
&B00001010

von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

Das habe ich mir auch gedacht und schon ausprobiert. Keine Chance, es 
geht nicht. Jetzt mal noch ne grundsätzliche Frage. Kann ich denn den 
Portb.1 überhaupt zum schalten einer LED nutzen ? Normalerweise sollte 
das doch funktionieren ?

vielen Dank und viele Grüße
funeddy

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Schritt 1: Setzen der Ports auf Output.
&B00001010
Schritt 2: Setzen der Ausgänge auf High/Low (und - oder Verknüpfung)
.255 müßte alle versuchen zu setzen.

Tausche mal alles von
Portb.3 = 1
Portb.1 = 1
zu:
Portb.1 = 1
Portb.3 = 1

Wenn die Doppelbelegung irgendwo angesprochen wurde bei dem Pin gibt es 
Probleme:
https://www.rahner-edu.de/grundlagen/einf%C3%BChrung-in-bascom/

: Bearbeitet durch User
von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

vielen Dank für mdie Hilfe,
ich habe für heute erstmal Feierabend gemacht, morgen geht es weiter.

vielen lieben Dank nochmal.

VG Funeddy

von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

Hallo nochmal,

wie lege ich denn die Ausgänge auf High/Low.
geht das mit DDR, also z.B.  DDRB = &B00001010   ?

vielen Dank für die Hilfe
VG
funeddy

von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

oder eher mit

DDRB, PORTB.1 = 11 für high      und
DDRB, PORTB.1 = 10 für low

Vg funeddy

von nipe (Gast)


Lesenswert?

Ist der Programmieradapter abgesteckt?

von nipe (Gast)


Lesenswert?

EDIT: Sorry - sollte eigentlich egal sein. Habe mich verguckt.

Beitrag #6580127 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Mit dem DDR Register konfigurierst du die Richtung (Ein-/Ausgang).
Mit dem PORT Register steuerst du die Ausgänge.
Mit dem PIN Register liest du die Eingänge.

von Joerg D. (Firma: Robocompucom) (funeddy)


Lesenswert?

Okay, vielen Dank für die Hilfe. Ich habe jetzt das Programm noch mal 
abgeändert und jetzt blinken, wenn der LDR Licht bekommt beide LED.

Damit kann der Thread geschlossen werden. Es funktioniert jetzt bestens.

vielen lieben Dank nochmal für die Hilfe.

VG funeddy oder Joerg

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.