Forum: Mikrocontroller und Digitale Elektronik STK500 Programmierhilfe


von John (Gast)


Lesenswert?

Hallo Jungs

Ich probiere momentan mit einem STK500 und ein ATmega88

Programmverlauf:

Wenn Taste PDC0 gedrückt wird, dann soll geprüft werden, ob alle 
EIngänge am PORTB eine 1 haben, ist das nicht der Fall sollen Die PINs 
in Port B, die keine "1" haben, detektiert und die passenden LED in 
PORTD ausgeschaltet werden.
ich denke die folgende Zeile funktioniert nicht[if (( StatusPortB != 
DiodeOk)) ] was amche ich da falsch.
Danke im Voraus

Programm:

#include <avr/signal.h>
#include <avr/sleep.h>
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>

#define BIT(x)  (1 << (x))
#define BITC(ADDRESS,BIT) (!(ADDRESS & (1<<BIT)))
#define BITS(ADDRESS,BIT) (ADDRESS & (1<<BIT))

#define SETB(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define CLEARB(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))


char StatusPortB, StatusPortC, DiodeOk ;
volatile unsigned int j, Diode_count ;

int main(void)
{

// configure I/O ports as INPUT
        DDRB = 0b00000000;
  PORTB = 0b11111111;
  DDRC = 0b000000;
  PORTC = 0b111111;

// configure I/O ports as OUTPUT
  DDRD = 0b11111111;
  PORTD = 0b00000000;

  while (1)
  {
    DiodeOk=0b11111111
    StatusPortB=PINB;
    StatusPortC=PINC;

    if (BITC(PINC,0))       // Wenn Taster PINC0 gedrückt ist, dann...
    {
      if (( StatusPortB != DiodeOk))  // wenn PORTB 0...bis 7 ungleich 1
      {
        for (j = 0; j <= 7; j++)
        {
          if  BITS(PINB,j)
          {
            SETB(PORTD,j);
            _delay_ms(100);

          }

        }
      }

      else
      {
        PORTD = 0b00000000;

      }

    }

  }

}

von spess53 (Gast)


Lesenswert?

Hi

>ob alle EIngänge am PORTB eine 1 haben

Du solltest aber beachten, das PB6 und PB7 nicht mit der Stiftleiste 
'PortB sondern mit XT1 und XT2 der Stiftleiste PortE verbunden sind.

MfG Spess

von John (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>ob alle EIngänge am PORTB eine 1 haben
>
> Du solltest aber beachten, das PB6 und PB7 nicht mit der Stiftleiste
> 'PortB sondern mit XT1 und XT2 der Stiftleiste PortE verbunden sind.
>
> MfG Spess

PortB ist bei mir garnicht angeschlossen, musste also eine 0 am PIn 
haben oder verstehe ich das falsch?

von spess53 (Gast)


Lesenswert?

Hi

>  DDRB = 0b00000000;
>  PORTB = 0b11111111;

Definiert PortB als Eingang mit Pull-Upwiderständen. Offene Pins werden 
also als H gelesen.

MfG Spess

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.