Forum: Compiler & IDEs IO Ports lassen sich nicht einstellen.


von Magnus S. (haralt)


Lesenswert?

Schönen guten Tag erst mal,

seit über einerWoche beschäftige ich mich jetzt mit Mikrocontrollern und 
habe mich mit den Tutorialas auseinandergesetzt. Jetzt bin ich soweit 
das ich um Hilfe "beim freundlichen Programmierer zwei Büro-, Zimmer- 
oder Haustüren weiter" bitte.

Ich habe das AVR STK 500 Übungsboard mit einem Atmega8515.

1. Mein Problem ist das ich die Pull-Up Widerstände nicht einstellen 
kann (Pull-Up ist immer aktiv).
2. Zum anderen bekomme ich das eingangs nicht verwertet bzw. bin ich mir 
nicht sicher ob das so richtig geschrieben ist.

Hir ist mein programm:
1
/* Header */
2
#include <avr/io.h>
3
4
/* Variablen*/
5
6
/*Programm*/
7
8
void io_init ()
9
{
10
DDRA = 0x00;    //Port A Eingang
11
PORTA= 0xFF;    //PORT A high
12
13
DDRB = 0xFF;    //Port B Ausgang
14
15
DDRC = 0xFF;    //Port C Ausgang
16
17
DDRD = 0xFF;    //Port D Ausgang
18
}
19
20
int main ()    //Hauptprogramm
21
{
22
  while (1)    //Wiederholung
23
  {
24
    if (PINA == 0x01)  // wenn PIN A0 = 0 soll PIN B0 = 1
25
    {
26
    PORTB = 0x01;
27
    }
28
  }
29
  
30
return 0;
31
}
Mein Ziel ist es das wenn ich SW0 drücke LED0 an geht.

Ich hoffe Ihr könnt mir helfen.

von Peter II (Gast)


Lesenswert?


von Peter II (Gast)


Lesenswert?

Nachtrag:

es reicht nicht eine init funktion zu schreiben, man muss sie auch 
aufrufen.

von Magnus S. (haralt)


Lesenswert?

Was ist meinen Sie genau mit aufrufen ?

Ich habe eine Spannungsversorgung, 4,6V an gewünschen Pin anligent, die 
wenn ich schalte auf 0V sinkt. (Ich schalte gegen GND).

Oder ist die Funktion falsch geschrieben?

Sollte da eher diese Funktion stehen?:
1
if (PINA &= (0<<PA0))

von Karl H. (kbuchegg)


Lesenswert?

Magnus Sprindt schrieb:
> Was ist meinen Sie genau mit aufrufen ?

Na aufrufen.
Funktionen müssen aufgerufen werden, damit sie auch was tun.

Nur schreiben ist zu wenig. Indem  man eine Funktion schreibt, legt man 
fest, was die Funktion tun würde, wenn sie aufgerufen wird
1
void foo()
2
{
3
  DDRA = 0xFF;
4
}
5
6
int main()
7
{
8
  foo();    // Die Programmausführung geht mit der Funktion foo
9
            // weiter. Alle Anweisungen in der Funktion werden
10
            // abgearbeitet und wenn die Funktion fertig ist, dann
11
            // kommt der Rücksprung aus der Funktion und dann geht
12
            // die Programmausführung hier mit der nächsten Anweisung
13
            // weiter
14
15
  PORTA = 0xFF;
16
17
  while( 1 )
18
    ;
19
}

Ich empfehle ganz dringend ein C-Buch!
Ohne Literatur hat das keinen wirklichen Sinn. Man muss sein Werkzeug 
(und nichts anderes ist eine Programmiersprache) schon zumindest 
einigermassen vernünftig beherrschen, wenn man auf einem µC Programme 
schreiben will. Denn sonst wird das ganz schnell frustrierend und man 
erleidet so oft Schiffbruch, dass man unweigerlich das Handtuch wirft.


Und nein. Das AVR-GCC-Tutorial ersetzt das nicht. Dieses Tutorial 
geht davon aus, dass man bereits leidlich C beherrscht und kümmert sich 
nur noch um die Spezialitäten, die auf einen bei der µC-Programmierung 
warten.

von mar IO (Gast)


Lesenswert?

Magnus Sprindt schrieb:
> Was ist meinen Sie genau mit aufrufen ?

Schreib mal alles aus io_init() in die main oder ruf die io_init() in 
main auf!

Magnus Sprindt schrieb:
> 1. Mein Problem ist das ich die Pull-Up Widerstände nicht einstellen
> kann (Pull-Up ist immer aktiv).

Mit den Pull-Up Widerstände brauchst Du nichts machen. Hier sind schon 
externe verbaut. Wenn kein Taster am STK 500 verbaut sind, dann liegt 
ein high-Pegel an...

siehe 3.2 http://www.atmel.com/Images/doc1925.pdf

von Werner P. (Gast)


Lesenswert?

Magnus Sprindt schrieb:

> Was ist meinen Sie genau mit aufrufen ?
>
> Ich habe eine Spannungsversorgung, 4,6V an gewünschen Pin anligent, die
> wenn ich schalte auf 0V sinkt. (Ich schalte gegen GND).
>
> Oder ist die Funktion falsch geschrieben?
>
> Sollte da eher diese Funktion stehen?:
>
1
> if (PINA &= (0<<PA0))
2
>

Prüfen ob an Port A Pin 0 HIGH anliegt:
1
if (PINA & (1<<PINA0)) {
2
3
}

Prüfen ob an Port A Pin 0 LOW anliegt:
1
if (!(PINA & (1<<PINA0))) {
2
3
}

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.