Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Fragen zur Software

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

stonewood
Geowizard
Beiträge: 1062
Registriert: Mo 3. Apr 2006, 10:15
Kontaktdaten:

Re: Fragen zur Software

Beitrag von stonewood »

thomas_st hat geschrieben:
stonewood hat geschrieben:zweitens:
Die Portpins haben einen internen Pullup der um die 10 KOhm hat. Genauer: 20-50 KOhm laut Datenblatt.
Die PullUps sind aber mit
ksbender hat geschrieben:

Code: Alles auswählen

[...]
Portb = 0                                                   'Ausgänge auf Low setzen
[...]
deaktiviert worden. Also zumindest an dieser Stelle ist bei Nutzung der PullUps noch eine Anpassung notwendig (entsprechende Bits auf High). Ob Bascom die PullUps dann noch eventuell global deaktiviert, wäre zu klären.
Nö, das setzt die Ausgänge auf 0 (also den gesamten PortB), macht aber nichts an den Pullups. Die werden ja eh nur für Eingänge genutzt.
stonewood
Geowizard
Beiträge: 1062
Registriert: Mo 3. Apr 2006, 10:15
Kontaktdaten:

Re: Fragen zur Software

Beitrag von stonewood »

ksbender hat geschrieben:
Kappler hat geschrieben:Probier es doch mal mit:
Ausgang Alias Portb.0
Dazu habe ich dann auch noch den Eingang auf PortB.1 gesetzt und siehe da:
KAUM MACHT MAN´S RICHTIG, FUNKTIONIERT ES AUCH.
Da war mir gestern im Datenblatt was über den Weg gelaufen daß bei 'PINxn = 1' der Ausgang umgeschaltet wird ('Toggling the Pin') ... konnte nicht wirklich glauben daß bascom das mitmacht, aber genau das scheinst Du oben ausgelöst zu haben.
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: Fragen zur Software

Beitrag von Kappler »

ksbender hat geschrieben:...Dazu habe ich dann auch noch den Eingang auf PortB.1 gesetzt und siehe da:
KAUM MACHT MAN´S RICHTIG, FUNKTIONIERT ES AUCH...
Bist du dir mit dem Eingang auf Portb.1 sicher?

Nach meinem Wissen werde Ausgänge mit Port... gesetzt, Eingänge aber mit Pin... ausgelesen.
Schau doch auch mal hier:
Roboternetz-Wiki

Die Roboternetz-Seite kann ich übrigens jedem wärmstens ans Herz legen, das ist ein schier unergründlicher Schatz an Microcontroller-Wissen...
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
thomas_st
Geowizard
Beiträge: 1643
Registriert: Fr 18. Nov 2005, 16:30
Wohnort: ~ N 51°21' E 12°00'

Re: Fragen zur Software

Beitrag von thomas_st »

stonewood hat geschrieben:
thomas_st hat geschrieben:
stonewood hat geschrieben:zweitens:
Die Portpins haben einen internen Pullup der um die 10 KOhm hat. Genauer: 20-50 KOhm laut Datenblatt.
Die PullUps sind aber mit
ksbender hat geschrieben:

Code: Alles auswählen

[...]
Portb = 0                                                   'Ausgänge auf Low setzen
[...]
deaktiviert worden. Also zumindest an dieser Stelle ist bei Nutzung der PullUps noch eine Anpassung notwendig (entsprechende Bits auf High). Ob Bascom die PullUps dann noch eventuell global deaktiviert, wäre zu klären.
Nö, das setzt die Ausgänge auf 0 (also den gesamten PortB), macht aber nichts an den Pullups. Die werden ja eh nur für Eingänge genutzt.
Nöp zurück, falls Bascom keine Extra-Wurst brät, wird bei auf Eingang geschalteten Ports, darüber die PullUps ein- und ausgeschaltet.

Kleines Zitat aus dem Datenblatt dazu:
Datenblatt Attiny 13 hat geschrieben:If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is
activated. To switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to
be configured as an output pin.
Viele Grüße,
Thomas(_st)
thomas_st
Geowizard
Beiträge: 1643
Registriert: Fr 18. Nov 2005, 16:30
Wohnort: ~ N 51°21' E 12°00'

Re: Fragen zur Software

Beitrag von thomas_st »

Kappler hat geschrieben:Bist du dir mit dem Eingang auf Portb.1 sicher?
Mit Portb bei einem auf Eingang konfigurierten Pin werden die PullUps aktiviert. Da die Schaltung wie sie ist, keine Möglichkeit bietet, dass Ladung abfließen kann (nur über die sehr geringen Leckströme des Eingangspins), ist der PullUp notwendig. Wenn er deaktiviert ist, dann funktioniert die Schaltung zwar erstmal auch, aber wenn der Readkontakt einmal aktiviert und anschließend wieder geöffnet wurde, wird es eine gewisse Zeit dauern (kann schon mal paar Sekunden sein) bis der Tiny es mitbekommt, dass der Readkontakt wieder offen ist.

Viele Grüße,
Thomas(_st)
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: Fragen zur Software

Beitrag von Kappler »

Ich meinte auch eher das Abfragen der Eingänge über Pin... statt über Port...
Oder habe ich da was missverstanden?

Zusammenfassend:

Eingang:
Setzen der Pullups mit Port...
Abfragen des Eingangs mit Pin...

Ausgang:
Setzen des Ausgangs mit Port...

So müsste es doch stimmen, oder?
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
thomas_st
Geowizard
Beiträge: 1643
Registriert: Fr 18. Nov 2005, 16:30
Wohnort: ~ N 51°21' E 12°00'

Re: Fragen zur Software

Beitrag von thomas_st »

Kappler hat geschrieben:Ich meinte auch eher das Abfragen der Eingänge über Pin... statt über Port...
Oder habe ich da was missverstanden?

Zusammenfassend:

Eingang:
Setzen der Pullups mit Port...
Abfragen des Eingangs mit Pin...

Ausgang:
Setzen des Ausgangs mit Port...

So müsste es doch stimmen, oder?
Ähm, klar, ähm, ja :)
Ich sehe inzwischen nur noch Widerstände ;) ...

... man könnte der Vollständigkeit halber noch beim Ausgang das Toggeln mit "Pin" angeben.

Viele Grüße,
Thomas(_st)
nhedgehog
Geocacher
Beiträge: 39
Registriert: So 24. Okt 2010, 22:22

7Segmentanzeige Attiny24 Problem Pin PB3

Beitrag von nhedgehog »

Nun muß ich doch einmal die Spezis fragen.
Ich habe das Reaktivlicht 7-Segment-reaktiv (kirby100124) nachgebastelt, die Schaltung meinen Bedürfnissen angepasst (Photowiderstand raus, Aktivierung per Reed der die Masse zuschaltet, Lochplatine mit möglichst wenig sichtbaren Drähten).
Die Pinbelegung ist aber bei mir eine Andere:
SC39-11GN Pin Attiny24 Pin
a 10 PA5 8
b 9 PA4 9
c 7 PA3 10
d 5 PB3 4
e 4 PB2 5
f 2 PA7 6
g 1 PA6 7
dp 6 PA2 11

Das Programm wurde entsprechend "umgeschrieben", alles funktioniert bis auf den Ausgang PB3. Wenn ich den Tinny aus der Fassung rausnehme und da Plus anlege leuchtet das entsprechende Segment, aber nicht wenn der Tinny steckt.

Programmcode:

Code: Alles auswählen

'nhedgehog 2010.10.31, Spiegelschrift, anderer Schaltplan&Magnetbake
$hwstack = 20                                               'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "ATtiny24.DAT"
$crystal = 128000                                           'Frequenz des internen Oszillators




'Config Adc = Single , Prescaler = Auto
Config Portb = &B00001100                                   'Pinb.2-3 auf 'Ausgang', Rest auf 'Eingang' schalten
Config Porta = &B11111100                                   'Pinq.2-7 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0
Porta = 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
Dim Zeichen As String * 1

'(Const Schwelle = 50                                         'je größer der Schwellwert, desto unempfindlicher
Const Tagschwelle = 800                                     'Schwellwert für Schlafmodus
Const Zwangsimpuls = 8                                      '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
')
Do
Gosub Warte250ms
'(Gosub Rechts
Gosub Warte250ms
Gosub Warte250ms
Gosub Warte250ms
')
Gosub Morsen
Gosub Warte8s
Loop


'(Pause:
Wdtcr = &B11110001                                          'Watchdog auf 8 Sekunden stellen
Reset Watchdog
Powerdown
Wdtcr = &B11010011                                          'Watchdog wieder auf 0,125 Sekunden zurückstellen
Schlafzaehler = Schlafzaehler + 1                           'merken wie oft Schlafmodus durchlaufen wurde
If Schlafzaehler = Zwangsimpuls Then                        'als Funktionskontrolle tagsüber LED auslösen
   Porta.5 = 1
   Reset Watchdog
   Powerdown
   Porta.5 = 0
   Schlafzaehler = 0
End If
Return
')

Morsen:
Restore Daten                                               'Am Beginn der Daten anfangen
'Alt = 1023                                                  'Doppelauslösung verhindern
Do
Read Zeichen
Wdtcr = &B11010111
If Zeichen = "dp" Then Gosub Pdp                            'Watchdog auf 2s stellen
If Zeichen = "0" Then Gosub P0
If Zeichen = "1" Then Gosub P1
If Zeichen = "2" Then Gosub P2
If Zeichen = "3" Then Gosub P3
If Zeichen = "4" Then Gosub P4
If Zeichen = "5" Then Gosub P5
If Zeichen = "6" Then Gosub P6
If Zeichen = "7" Then Gosub P7
If Zeichen = "8" Then Gosub P8
If Zeichen = "9" Then Gosub P9
If Zeichen = "n" Then Gosub Pn
If Zeichen = "e" Then Gosub Pe
If Zeichen = "re" Then Gosub Rechts
If Zeichen = "li" Then Gosub Links
If Zeichen = " " Then Gosub Leer
If Zeichen = "ost" Then Gosub Ost
If Zeichen = "nord" Then Gosub Nord
Wdtcr = &B11010011                                          'Watchdog wieder auf 125ms stellen
If Zeichen = "X" Then Return
Loop


Pdp:
Porta = &B00000100
Reset Watchdog
Powerdown
Porta = 0
Return

P0:
Portb = &B00001100
Porta = &B10111011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P1:
Porta = &B10000000
Portb = &B00000100
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P2:
Portb = &B00001000
Porta = &B11101000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P3:
Portb = &B00001100
Porta = &B11100000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P4:
Portb = &B00000100
Porta = &B11010000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P5:
Portb = &B00001100
Porta = &B01110000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P6:
Portb = &B00001100
Porta = &B01111000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P7:
Portb = &B00000100
Porta = &B10100000
Reset Watchdog
Powerdown
Portb = 0
Return

P8:
Portb = &B00001100
Porta = &B11111000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P9:
Portb = &B00001100
Porta = &B11110000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Pn:
Portb = &B00000100
Porta = &B01001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Pe:
Portb = &B00001000
Porta = &B01111000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Links:
Wdtcr = &B11010100
Portb = &B00000100
Reset Watchdog
Powerdown
Portb = 0
Porta = &B10000000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00100000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00010000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00001000
Reset Watchdog
Powerdown
Porta = 0
Portb = &B00001000
Reset Watchdog
Powerdown
Portb = 0
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Rechts:
Wdtcr = &B11010100
Porta = &B00001000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00010000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00100000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B10000010
Reset Watchdog
Powerdown
Porta = 0
Portb = &B00000100
Reset Watchdog
Powerdown
Portb = 0
Portb = &B00001000
Reset Watchdog
Powerdown
Portb = 0
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Ost:
Wdtcr = &B11010101
Portb = &B00001100
Porta = &B01001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00001000
Porta = &B11101000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000100
Porta = &B11000000
Reset Watchdog
Powerdown
Porta = 0
Return

Nord:
Wdtcr = &B11010101
Portb = &B00000100
Porta = &B01001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00001100
Porta = &B01001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Porta = &B01001000
Reset Watchdog
Powerdown
Porta = 0
Portb = &B00001100
Porta = &B11001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Leer:
Reset Watchdog
Portb = 0
Porta = 0
Powerdown

Return

Warte8s:
Wdtcr = &B11110001                                          'Watchdog auf 8s einstellen
Reset Watchdog
Powerdown
Return

Warte16ms:
Wdtcr = &B11010000                                          'Watchdog auf 16ms einstellen
Reset Watchdog
Powerdown
Return

Warte64ms:
Wdtcr = &B11010010                                          'Watchdog auf 64ms einstellen
Reset Watchdog
Powerdown
Return

Warte250ms:
Wdtcr = &B11010100                                          'Watchdog auf 250ms einstellen
Reset Watchdog
Powerdown
Return
End

End

Daten:
Data "nord"
Data "dp"
Data "re"
Data "n" , "1" , "2" , "dp" , "3" , "4" , "5"
Data " "
Data "li"
Data "ost"
Data " "
Data "e" , "6" , "7" , "dp" , "8" , "9" , "0"
Data "re"
Data "X"
Hab ich den Tinny gegrillt oder irgendetwas simples übersehn?
Danke,
nhedgehog
nhedgehog
Geocacher
Beiträge: 39
Registriert: So 24. Okt 2010, 22:22

Re: Fragen zur Software

Beitrag von nhedgehog »

Wer lesen kann ist klar im Vorteil.
Port B output buffers have symmetrical drive characteristics with both high sink and source
capability except PB3 which has the RESET
capability. To use pin PB3 as an I/O pin, instead of
RESET pin, program (‘0’) RSTDISBL fuse. As inputs, Port B pins that are externally pulled low/quote]
und später:
Reset input. A low level on this pin for longer than the minimum pulse length will generate a
reset, even if the clock is not running and provided the reset pin has not been disabled. Shorter
pulses are not guaranteed to generate a reset.
The reset pin can also be used as a (weak) I/O pin.
Zuerst hab ich den RSTDISBL fuse gesetzt und dann folgerichtig festgestellt, daß der I/O Strom nicht ausreicht. :kopfwand: Jetzt hab ich das Segment auf PA2 gelegt und alles ist in Butter. Außer das ich jetzt nen neuen Tiny nehmen mußte, da der Alte mit dem gesetzten RSTDISBL fuse nicht mehr ansprechbar ist. :zensur: Aber die Schaltung funktioniert. Falls jemand einen Tip zur Wiederbelebung hat (oder mit einem High Voltage Programmer in der Nähe von Halberstadt ist), ich wäre ein dankbarer Abnehmer.

nhedgehog
stonewood
Geowizard
Beiträge: 1062
Registriert: Mo 3. Apr 2006, 10:15
Kontaktdaten:

Re: Fragen zur Software

Beitrag von stonewood »

nhedgehog hat geschrieben: Zuerst hab ich den RSTDISBL fuse gesetzt und dann folgerichtig festgestellt, daß der I/O Strom nicht ausreicht. :kopfwand: Jetzt hab ich das Segment auf PA2 gelegt und alles ist in Butter. Außer das ich jetzt nen neuen Tiny nehmen mußte, da der Alte mit dem gesetzten RSTDISBL fuse nicht mehr ansprechbar ist. :zensur: Aber die Schaltung funktioniert. Falls jemand einen Tip zur Wiederbelebung hat (oder mit einem High Voltage Programmer in der Nähe von Halberstadt ist), ich wäre ein dankbarer Abnehmer.
RSTDISBL ausschalten geht nur mit High Voltage ... da liegst Du schon ganz richtig ... daher sollte man den auch nur anfassen wenn man genau weiß was man da tut.
Antworten