mikrocontroller.net

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


Autor: Andy Y. (merlin129)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc V. (Firma: Vescomp) (logarithmus)
Datum:

Bewertung
0 lesenswert
nicht 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:
• MISO/PCINT4 – Port B, Bit 4
MISO: Master Data input, Slave Data output pin for SPI channel. When the SPI is enabled as a Master,
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,
the pull-up can still be controlled bythe PORTB4 bit.

• MOSI/OC2/PCINT3 – Port B, Bit 3
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
Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
-1 lesenswert
nicht 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?

: Bearbeitet durch User
Autor: Andy Y. (merlin129)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Stefanus F. (stefanus)
Datum:

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

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.