IO-Probleme mit ATtiny 15L

Gast #152997
Hallo,

habe ein kleines Problem mit dem Einlesen von Eingängen am ATtiny15L.
Gibts da was besonderes zu beachten oder hab ich im Code was ganz
falsch gemacht? Benutze den Compiler von Imagecraft.


#include <iotiny15.h>    // IO-Test

int main (void)
{
   PORTB = 0x00;    // set portb data register: portb4
  DDRB = 0x1B;    // set data direction B: 3 input rest output

  for (;;)
  {

  if ((PINB&0x04)!=1)
    {
    PORTB |= 0x10;    //nur portB4 1 setzen
    }

  if ((PINB&0x04)==0)
    {
    PORTB &= 0xEF;    //nur portB4 0 setzen
    }
  }
}
Gast #152998
Das erste if...
if ((PINB&0x04)!=1)  <---- !=1  also ==0 ist das wirklich gemeint ?

das zweite if...
if ((PINB&0x04)==0)  <---- ==0 ?? ist doch das Gleiche wie oben


Heinz
Gast #152999
Vielleicht noch die Pullups einschalten?

 DDRB = 0x1B  //0b00011011 Sicher mit 3 Inputs?
 PORTB = 0xE4 //0b11100100 Bei jedem Input (0) 1 Pullup

Ansonsten würde ich PB4 nicht mit PORTB = 0xnn ein oder ausschalten
sondern mit SBI PORTB,4 oder CBI PORTB,4 da Du alle anderen Port-Pins
auch beeinflusst.

Oder den Port vorher einlesen, verknüpfen mit OR oder AND und wieder
ausgeben.

Gruß
Andi
Gast #153001
> Ansonsten würde ich PB4 nicht mit PORTB = 0xnn ein oder
> ausschalten sondern mit SBI PORTB,4 oder CBI PORTB,4 da Du
> alle anderen Port-Pins auch beeinflusst.

Genauso macht es der OP doch?

PORTB |= 0xnn wird zu sbi, PORTB &= ~0xnn zu cbi (die Funktionen
sbi/cbi gibt es ja schon seit einiger Zeit gar nicht mehr).
Gast #153003
Danke schon mal für die Antworten.
Werde dies heute abend nochmal testen. Irgendwo muß der Fehler ja sein.
Das mit dem Vergleich auf 0 bzw. 1 ist hier nur ein Schreibfehler,
sorry. Das Ausgeben über den PORTB funktioniert problemlos, nur mein
Eingang wird nicht eingelesen. Vielleicht hat  sich ja auch der µP
verabschiedet... werde nochmal verschiedens durchprüfen.
Gast #153004
Innerhalb der "ifbedingunng" nen Port lesen und vergleichen hat bei
mir auch nicht funktioniert. Gönne Dir ein freies Register als lokale
Bytevariable und eine Zeile Code mehr und es wird gehen.
Gast #153005
Hallo zusammen,

habe nochmal verschiedene Fehlerquellen untersucht - erfolglos. Hat
jemand Erfahrungen mit dem Compiler von Imagecraft bzw. hat der
vielleicht ein Problem? Nachstehend nochmal mein Testcode:

*/ IO-Test ATtiny15L

#include <iotiny15.h>

int main (void)
{
   unsigned char pinbtmp;

   DDRB = 0xF7;
  PORTB = 0x00;

  for (;;)
  {
  pinbtmp = PINB;

  if ((pinbtmp&0x08)==1)
    {
    PORTB |= 0x10;    //nur portB4 1 setzen
    }
  else
    {
    PORTB &= 0xEF;    //nur portB4 0 setzen
    }
  }
}
Gast #153007
Hallo Peter,

verzeih mir diese Dummheit. Aufgrund von copy+paste aus alten
Programmen und lediglich kleinen Änderungen (Verstand ausgeschaltet)
kommt sowas zustande - Betriebsblindheit, wenn man immer nur auf 0
vergleicht und sich nicht klar machen will, daß das Bitergebnis ja gar
nicht ähnlich true/false bzw. 0/1 ist. Eigentlich sollte man so eine
Bremse im Forum steinigen :-) ... Sorry + nochmal: Danke! Hatte Deine
erste Antwort net logisch nachvollzogen sondern aus meinem Hirn
(welches eigentlich?) "verschoben".

Gruß Jochen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.