mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Attiny1634 - pb3 input problem


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich habe das Problem, dass bei einem Attiny1634  Pin PB3 (hw pin18) 
nicht als Input funktioniert. PC0 habe ich identisch initialisiert, hier 
funktionierts. PB3 funktioniert als Output, als Input jedoch gibt PB3 
immer eine 0 zurück, auch bei aktiviertem Pull-Up.

Hat jemand eine Idee, was ich übersehe?

Hier der Testcode zur Anschauung. Die Inputs sind jeweils als Low-Active 
konfiguriert (Taster gegen Gnd). Im Testcode leuchtet die Debug-Led 
dauerhaft, da PB3 immer als 0 eingelesen wird.

/*
 * ATtiny1634_io-test.c
 *
 */

#include <avr/io.h>

// outputs, low-active
#define EN_DEBUG_LED    PORTC &= ~(1<<PC1);
#define DIS_DEBUG_LED    PORTC |= (1<<PC1);

// inputs, low-active
#define INPUT1      !(PINB & 1<<PB3) // geht noch ned
#define INPUT2      !(PINC & 1<<PC0)

int main(void)
{
  DDRA = 0x00;
  PORTA = 0x00;

  DDRB = 0x00;
  PORTB = (1<<PB3); // enable pullup input1

  DDRC = (1<<PC1);  // set output debug-led
  PORTC = (1<<PC0); // enable pullup input2

    while (1)
    {
  if(INPUT1 || INPUT2)
  {  EN_DEBUG_LED;}
  else
  {  DIS_DEBUG_LED;}
    }
}

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier noch der Link zum Datenblatt des 1634:
http://www.atmel.com/Images/Atmel-8303-8-bit-AVR-M...

thx!

Autor: ehrengast (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Markus schrieb:

> hier noch der Link zum Datenblatt des 1634:
> 
http://www.atmel.com/Images/Atmel-8303-8-bit-AVR-M...

Und? Selber lesen kommt nicht in Frage?

Dabei kommt raus, dass (neben einem Problem mit der Verdrahtung) nur 
eins als mögliche Ursache in Frage kommt: falsche Initialisierung von 
Timer1.

Autor: Markus (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
hey ehrengast,

Fehler in der Verdrahtung kann ich ausschliessen.

Im Datenblatt hab ich natürlich zuerst nach Hilfe gesucht, aber nix 
gefunden, deshalb die Frage, was ich übersehen habe.

Timer1 wird hier garnicht genutzt/initialisiert, OC1A ist eine 
alternative Portfunktion, also gehe ich davon aus, dass default-mässig 
ein io konfiguriert ist? Wenn du einen Hinweis hast, wo oder nach was 
genau ich im Datenblatt suchen muss, wäre ich dankbar! (Anfänger...)

gruess markus

Autor: neuer PIC Freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PORTB = (1<<PB3); // enable pullup input1
Die Jungens von Atmel sehen das evtl anders. Hör auf Sie.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
neuer PIC Freund schrieb im Beitrag #4680204:
> PORTB = (1<<PB3); // enable pullup input1
> Die Jungens von Atmel sehen das evtl anders. Hör auf Sie.

Das ist schon richtig, das stimmt. Wobei ich da immer die Einstellung 
habe das ich es veroder - also PORTB |= (1<<PB3) - PB3 hat nun auch 
keine Sonderbaren (wie z.b. JTAG etc...) alternativen Zuweisungen.

Im Grunde KANN es nur eine fehlerhafte Beschaltung sein.

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,
ich vermute PIC Freund möchte dich auf etwas hinweisen:

neuer PIC Freund schrieb im Beitrag #4680204:
>
> PORTB = (1<<PB3); // enable pullup input1
> 
> Die Jungens von Atmel sehen das evtl anders. Hör auf Sie.

Laut dem von dir verlinkten Datenblatt, S. 72:
PUEB – Port B Pull-up Enable Control Register
PORTB – Port B Data Register

Wenn du also den Pull-Up aktivieren möchtest, musst du, wie es sich mir 
dastellt, das PUEB-Register bearbeiten.

Viel Erfolg und viele Grüße,
Alex

Autor: neuer PIC Freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tabelle 10-1. Datenblatt lesen hilft echt.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohh.. danke! Das kannt ich so auch noch nicht! PUExn... welche Atmels 
betrifft dies denn!?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

erstmal Danke für eure Hilfe.

Wiegesagt, Fehler an der Verdrahtung ist auszuschliessen. Schliesse ich 
einen externen 10k Pullup an den Pin, sieht man die Schalterbetätigung 
auf den Osci (direkt auf dem Pin gemessen). Allerdings beträgt die 
Spannung nur 2,6V anstelle von 5V. Scheint also intern noch etwas 
anderes zu passieren... Achja, auch mit externen Pullup funktioniert die 
Auswertung des Inputs nicht.

@neuer Pic-Freund
ok, intepretiere ich die Tabelle richtig, dass ich die Pullups mit PUEx 
und nicht mit PORTx (wenn als Einfang definiert) steuern muss? Wieso 
funktioniert es dann bei PC0 einwandfrei?

hab die Initialisierung geändert auf:
DDRB = 0x00;
PUEB = (1<<PB3);
//PORTB = (1<<PB3); // enable pullup input1

ändert sich aber nix am Verhalten.

Weitere Hinweise nach was ich suchen muss im Datenblatt werden gerne 
entgegengenommen. Ist als Neuling relativ schwierig, sich da 
zurechtzufinden und die nötigen Informationen rauszusuchen...

Danke für eure Hilfe!

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

ist dir der Unterschied zwischen
PUEB = (1<<PB3);
und
PUEB |= (1<<PB3);
bewusst ?

Denn hier, in der Schreibweise, lauern weitere Fehler !

Was bedeutet dieser Ausdruch ?
DDRB &= ~(1<<PB3);

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl,

hm ja, der Unterschied ist mir soweit schon bewusst:
PUEB = (1<<PB3); setzt PB3 auf 1, alle anderen bits werden mit 0 
überschrieben
PUEB |= (1<<PB3); setzt PB3 auf 1, alle anderen bits bleiben unverändert
DDRB &= ~(1<<PB3); setzt PB3 auf 0, alle anderen bits bleiben 
unverändert

Sollte aber in meinem Testcode keine Rolle spielen, da nur PB3 von PortB 
genutzt wird?

thx!

gruess markus

Autor: c-hater (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Markus schrieb:

> Wiegesagt, Fehler an der Verdrahtung ist auszuschliessen.

Ja klar, und die Rente ist sicher...

> Schliesse ich
> einen externen 10k Pullup an den Pin, sieht man die Schalterbetätigung
> auf den Osci (direkt auf dem Pin gemessen). Allerdings beträgt die
> Spannung nur 2,6V anstelle von 5V.

Brauchst du NOCH MEHR Beweise für einen Schaltungsfehler? Das sieht doch 
sehr stark nach einem relativ hochohmigen Popel nach GND aus. Verkohltes 
Flussmittel z.B. käme da durchaus in Frage.

> Scheint also intern noch etwas
> anderes zu passieren...

Das wäre natürlich auch noch eine Möglichkeit. Der Controller ist 
schlicht defekt. Dann passiert natürlich durchaus mal was anderes, als 
im DB steht. Allerdings: so leicht bekommt man einen AVR8 auch wieder 
nicht kaputt, da muss man schon richtig Scheisse gebaut haben.

Autor: markus (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
hallo c-hater,

ich schau mir den Aufbau am Dienstag nochmals genaustens an. ich habe 
zwei identisch bestückte PCBs, beide zeigen das selbe Verhalten. ich 
kanns mir kaum vorstellen, dass beim layouten, bestücken oder 
schaltungsdesign etwas dermassen daneben ging. aber who knows - evtl. 
seh ich den wald vor lauter bäumen nicht. die pause übers weekend ist da 
bestimmt hilfreich.
ich meld mich dann wieder.

gruess & thx,
markus

Autor: captain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Schau mal im Datenblatt unter Errata Punkt 1. Vielleicht reicht's, wenn 
du den Watchdog enablest.
Gruß,
Sascha

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

sollte es wirklich an dem von Sascha genannten Punkt liegen, so wäre es 
super, wenn du es später hier mitteilst.

captain schrieb:
> Hallo,
>
> Schau mal im Datenblatt unter Errata Punkt 1. Vielleicht reicht's, wenn
> du den Watchdog enablest.
> Gruß,
> Sascha

Viel Erfolg und schönes Wochenende,
Alex

Autor: captain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann auf jeden Fall Probleme machen.
Da hatte ich mal einige Stunden viel Spaß!
Watchdog an, und gut war's.

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super, vielen dank für den Tipp, ich probiers am Dienstag! :) Gruss und 
auch ein schönes Wochenende! Markus

Autor: Draco (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Mal so in den Raum gestellt: Was hat PB3 mit dem Watchdog zu tun?!

Autor: markus (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
aus dem datenblatt:

31.1 ATtiny1634
31.1.1 Rev. C
• Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled
1. Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled
Port pin PB3 is not guaranteed to perform as a reliable input when the 
Ultra Low Power (ULP) oscillator is not
running. In addition, the pin is pulled down internally when ULP 
oscillator is disabled.
Problem Fix / Workaround
The ULP oscillator is automatically activated when required. To use PB3 
as an input, activate the watchdog
timer. The watchdog timer automatically enables the ULP oscillator.

Autor: Draco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
markus schrieb:
> aus dem datenblatt:
>
> 31.1 ATtiny1634
> 31.1.1 Rev. C
> • Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled
> 1. Port Pin Should Not Be Used As Input When ULP Oscillator Is Disabled
> Port pin PB3 is not guaranteed to perform as a reliable input when the
> Ultra Low Power (ULP) oscillator is not
> running. In addition, the pin is pulled down internally when ULP
> oscillator is disabled.
> Problem Fix / Workaround
> The ULP oscillator is automatically activated when required. To use PB3
> as an input, activate the watchdog
> timer. The watchdog timer automatically enables the ULP oscillator.

Das steht dann aber nur in der Errata?! Warum schreibt man das dann 
nicht gleich mit zu die Portdefinitionen? Da suchst man sich doch 
dämlich damit!

Autor: Paul Baumann (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Draco schrieb:
> Da suchst man sich doch
> dämlich damit!

Richtig. Aber die Leute, die sofort mit der weisen Frage kommen:
"Was steht denn im Datenblatt?" -die sollen sich ruhig einen Wolf 
suchen.
Es steht eben NICHT alles im Datenblatt, was im Übrigen vom Umfang her 
eher ein DatenBUCH ist.

MfG Paul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
markus schrieb:
> Port pin PB3 is not guaranteed to perform as a reliable input when the
> Ultra Low Power (ULP) oscillator is not
> running.

Das ist natürlich der Hammer.
Darauf wäre c-hater nie gekommen.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
captain schrieb:
> Hallo,
>
> Schau mal im Datenblatt unter Errata Punkt 1. Vielleicht reicht's, wenn
> du den Watchdog enablest.
> Gruß,
> Sascha


watchdog eingeschaltet, PB3 funktioniert.

Vielen Dank an Sascha und alle anderen!! :) :)

gruss und schöne Woche,
Markus

Autor: captain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

bitte, gerne ;-)
Freut mich, dass es jetzt geht!

dir auch eine schöne Woche

Gruß,
Sascha

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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