LED blinken lassen funktioniert nicht wenn ich nur den entsprechenden Pin als Ausgang setze

Gast #4823930
Lesenswert?

Hallo,
ich habe ein merkwürdiges Problem, woran ich als Anfänger scheiter. Ich 
habe ein Arduino Uno, den ich habe, da hier alles drauf ist (quarz, 
Programmierschnittstelle, Kondensatoren usw). Programmieren tu ich aber 
über atmelstudio in normalem C.

Es ist ja eine LED an PB5 (arduino Pin13) angebracht. Diese möchte ich 
blinken lassen
1
#define F_CPU 16000000UL
2
#include <util/delay.h>
3
#include <avr/io.h>
4

5

6
int main(void)
7
{
8
    DDRB |=  PINB5;
9
    PORTB |= PORTB5;
10
  while(1){
11
      PORTB ^= ( 1 << PORTB5 );
12
        _delay_ms(1000);
13

14
  }
15
  
16
}

Aber die LED bleibt an.
tausche ich die Zeile
DDRB |= PINB5 mit
DDRB |= 0xFF
funktioniert es.
aber warum funktioniert das nicht, wenn ich nur PINB5 als Ausgang setze? 
habe auch alle anderen probiert (einfach die zahlen von 0 bis 7 (aus 
iom328p.h)) aber nie fängt die an zu blinken.
Gast #4823952
Lesenswert?

Doof. Ich ärgere mich. Vor allem, weil ich es in der while-Schleife 
richtig gemacht habe.
war ja klar, dass es ein banaler Fehler war. Aber als Anfänger sieht man 
das dann doch nicht immer.
Ich danke euch allen für die schnelle hilfe. Dann kann ich jetzt den 
Timer in angriff nehmen.
#4823972
Lesenswert?

Das finde ich in der Header:
1
#define PORTB   _SFR_IO8 (0x05)
2
/* PORTB */
3
#define PB7     7
4
#define PB6     6
5
#define PB5     5
6
#define PB4     4
7
#define PB3     3
8
#define PB2     2
9
#define PB1     1
10
#define PB0     0

für mich sieht das nicht so aus, als würde man PORRTB an dieser Stelle 
schreiben dürfen!?

Wenn ich die Header "Portpins.h" implementieren würde, dann würde das 
meiner Meinung nach funktionieren wie es oben geschrieben wurde, ohne 
diese Header nicht.
1
#if defined(PB5) && !defined(PORTB5)
2
#  define PORTB5 PB5
3
#elif defined(PORTB5) && !defined(PB5)
4
#  define PB5 PORTB5
5
#endif
Oder beachte ich da irgendwas nicht?
Gast #4824008
Lesenswert?

Das Problem bei mir ist, dass ich PB5 nicht schreiben kann, da es 
niergends definiert ist. irgendwie habe ich die avr/io.h nicht. Wenn die 
öffnen möchte, passiert einfach nichts. in der header iom328p.h ist PB5 
auch nicht definiert, sondern PINB5. Daher habe ich das so geschrieben.
Gast #4824016
Lesenswert?

Jonas schrieb:
> Das Problem bei mir ist, dass ich PB5 nicht schreiben kann

Du musst sicherstellen (welches Studio verwendest du?) dass
du deinen Prozessor im Studio-Projekt definiert hast. Wenn
dies der Fall ist dann müsstest du auch die gewünschten
Bezeichnungen verwenden können.
Gast #4824029
Lesenswert?

Wenn ich in der Solution direkt danach suche, wird mir die auch 
angzeigt. (Vorher wollte ich mit rechtsklick -> go to implementation)
aber hier wird nur die oben erwähnte header includiert

#elif defined (_AVR_ATmega328P_)
#  include <avr/iom328p.h>

und in dieser steht kein PB5 :(
Gast #4824035
Lesenswert?

Jonas schrieb:
> irgendwie habe ich die avr/io.h

#include <avr/io.h>

muss in deiner Source stehen.

Wenn das nicht funktioniert solltest du nochmal ein Projekt
neu anlegen und deinen Sourcecode in die Datei main.c
hereinkopieren.

Leider kann man bereits beim Anlegen im (komplizierten)
Studio 7 einiges falsch machen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren