Forum: Mikrocontroller und Digitale Elektronik ATmega328p interne Pullups auf MOSI und MISO aktivieren


von Andy Y. (merlin129)


Lesenswert?

Guten Tag Zusammen, ich habe eine kurze Frage - vielleicht auch unnötig, 
aber ich verstehe es gerade nicht.

Folgendes:
Ich verwende einen Arduino Nano (nur die Hatdware aus bequemlichkeit, 
Klon aus Fernost) der über ein AVRISP mkII programmiert wird. 
Programmiere am Mac mit Visual Studio Code und avr-gcc. Also keine 
Arduino Software.
Ich habe einen Drehgeber mit Taster angeschlossen. Interne Pullups des 
ATmega328p auf 1 gesetzt, mit Drehgeber und Taster verbunden dann nach 
GND geführt. Nun tut das ganze mit meiner Auswertung und Debouncing 
einwandfrei.
Da ich in der Endausbaustufe etliches an IO‘s Belege, wollte ich die 
beiden Pins PB4 und PB5 hier mit nutzen. Also MOSI und MISO der SPI 
Schnittstelle auf A und B des Drehencoders legen.

Preisfrage:
Warum kann ich auf PB4 und PB5 die internen Pullups nicht aktivieren? 
Geht weder wenn ich das AVRISP mkII abstecke oder anstecke. Ich messe 
keine 5V am Eingang. Geht das nur wenn ich die SPI deaktiviere (SPIEN -> 
1)?

Viele Grüße

Andreas

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Andy Y. schrieb:
> Warum kann ich auf PB4 und PB5 die internen Pullups nicht aktivieren?

 Weil du es falsch machst - nicht PB4 und PB5 sondern PB3 und PB4:
 MOSI ist PB3 und MISO ist PB4 und pull-up kann aktiviert werden.

 ATMEL sagt folgendes:
1
• MISO/PCINT4 – Port B, Bit 4
2
MISO: Master Data input, Slave Data output pin for SPI channel. When the SPI is enabled as a Master,
3
this pin is configured as an input regardless of the setting of DDB4. When the SPI is enabled as a Slave, the data direction of this pin is controlled by DDB4. When the pin is forced by the SPI to be an input,
4
the pull-up can still be controlled bythe PORTB4 bit.
5
6
• MOSI/OC2/PCINT3 – Port B, Bit 3
7
MOSI: SPI Master Data output, Slave Data input for SPI channel. When the SPI is enabled as a Slave, this pin is configured as an input regardless of the setting of DDB3. When the SPI is enabled as a Master, the data direction of this pin is controlled by DDB3. When the pin is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB3 bit.

: Bearbeitet durch User
von H.Joachim S. (crazyhorse)


Lesenswert?

Welcher Prozessor ist da drauf? Kenne zwar keinen, bei dem an diesen 
Pins was besonderes wäre, aber wer weiss...
An SPIEN liegt es nicht, da solltest du auch vorsichtig sein, geht aber 
via ISP sowieso nicht zu ändern.
DDRx=0?
PORTx=1?

Evtl. hast du die SPI angeschaltet (SPI!=ISP, auch wenn die meist die 
gleichen Pins benutzen)

von Joachim B. (jar)


Lesenswert?

H.Joachim S. schrieb:
> Welcher Prozessor ist da drauf?

zuerst ATmega328 später bei clone meist ATmega328p

echt jetzt die Frage? wer es wissen will ist mit google schneller

von Stefan F. (Gast)


Lesenswert?

> Warum kann ich auf PB4 und PB5 die internen Pullups nicht aktivieren?

Ohne Quelltext ist diese Frage schwer zu beantworten.
Ich kann es jedenfalls ohne besondere Tricks anwenden zu müssen.

Wie sieht den dein Programm aus?

von Andy Y. (merlin129)


Lesenswert?

>  Weil du es falsch machst - nicht PB4 und PB5 sondern PB3 und PB4:
>  MOSI ist PB3 und MISO ist PB4 und pull-up kann aktiviert werden.

Sorry natürlich die meinte ich. Bin im Schaltplan verrutscht.

> Welcher Prozessor ist da drauf?

ATmega328p

> Ohne Quelltext ist diese Frage schwer zu beantworten.
> Ich kann es jedenfalls ohne besondere Tricks anwenden zu müssen.

Auf anderen IO‘s tut es. Wenn es bei Dir tut reicht mir das. Dann 
versuche ich es mal rudimentär auf einem alten STK500. Mich wurmt mehr 
das ich die Lösung nicht kenne. Das Problem selbst juckt mich peripher. 
Aber wenn hier jeder sagt, es müsste tun dann will ich wissen was bei 
mir schief läuft :)

von Stefan F. (Gast)


Lesenswert?

Vielleicht haben die Chinesen die internen Pull-Up Widerstände mit einem 
Seitenschneider heraus geschnitten :-)

von Einer K. (Gast)


Lesenswert?

Andy Y. schrieb:
>> Ohne Quelltext ist diese Frage schwer zu beantworten.
>> Ich kann es jedenfalls ohne besondere Tricks anwenden zu müssen.
>
> Auf anderen IO‘s tut es. Wenn es bei Dir tut reicht mir das.

Du möchtest also den Fehler verursachenden Code geheim halten...


Und dennoch:
Andy Y. schrieb:
> Mich wurmt mehr
> das ich die Lösung nicht kenne.

Fällt dir der Widerspruch in deiner Erwartungshaltung nicht auf?

von H.Joachim S. (crazyhorse)


Lesenswert?

Unabhängig davon, dass du das Problem finden solltest - die internen 
Pullups sind eh zu hochohmig, auch wenn es erstmal funktioniert. 3k3 
oder 4k7 sind günstige Werte.

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.