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.thomas_st hat geschrieben:Die PullUps sind aber mitstonewood hat geschrieben:zweitens:
Die Portpins haben einen internen Pullup der um die 10 KOhm hat. Genauer: 20-50 KOhm laut Datenblatt.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.ksbender hat geschrieben:Code: Alles auswählen
[...] Portb = 0 'Ausgänge auf Low setzen [...]
Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Fragen zur Software
Moderator: radioscout
Re: Fragen zur Software
Re: Fragen zur Software
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.ksbender hat geschrieben:Dazu habe ich dann auch noch den Eingang auf PortB.1 gesetzt und siehe da:Kappler hat geschrieben:Probier es doch mal mit:
Ausgang Alias Portb.0
KAUM MACHT MAN´S RICHTIG, FUNKTIONIERT ES AUCH.
Re: Fragen zur Software
Bist du dir mit dem Eingang auf Portb.1 sicher?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...
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
Bekennender Fremdlogleser und Rosinenpicker
Re: Fragen zur Software
Nöp zurück, falls Bascom keine Extra-Wurst brät, wird bei auf Eingang geschalteten Ports, darüber die PullUps ein- und ausgeschaltet.stonewood hat geschrieben: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.thomas_st hat geschrieben:Die PullUps sind aber mitstonewood hat geschrieben:zweitens:
Die Portpins haben einen internen Pullup der um die 10 KOhm hat. Genauer: 20-50 KOhm laut Datenblatt.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.ksbender hat geschrieben:Code: Alles auswählen
[...] Portb = 0 'Ausgänge auf Low setzen [...]
Kleines Zitat aus dem Datenblatt dazu:
Viele Grüße,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.
Thomas(_st)
Re: Fragen zur Software
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.Kappler hat geschrieben:Bist du dir mit dem Eingang auf Portb.1 sicher?
Viele Grüße,
Thomas(_st)
Re: Fragen zur Software
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?
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
Bekennender Fremdlogleser und Rosinenpicker
Re: Fragen zur Software
Ähm, klar, ähm, jaKappler 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?

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)
7Segmentanzeige Attiny24 Problem Pin PB3
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:
Hab ich den Tinny gegrillt oder irgendetwas simples übersehn?
Danke,
nhedgehog
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"
Danke,
nhedgehog
Re: Fragen zur Software
Wer lesen kann ist klar im Vorteil.
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.
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
Zuerst hab ich den RSTDISBL fuse gesetzt und dann folgerichtig festgestellt, daß der I/O Strom nicht ausreicht.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.


nhedgehog
Re: Fragen zur Software
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.nhedgehog hat geschrieben: Zuerst hab ich den RSTDISBL fuse gesetzt und dann folgerichtig festgestellt, daß der I/O Strom nicht ausreicht.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.
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.