IO-Probleme mit ATtiny 15L

Gast #152997
Lesenswert?
• ▲
▼
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 #152999
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
> 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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

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.

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.