Forum: Mikrocontroller und Digitale Elektronik Atmega 8a bits an PortD manipulierren für LCD später


von Fritz B. (kleinfritzchen)


Lesenswert?

Hallo, ich bin blutiger Anfänger und versuch gerade zu verstehen warum 
ich mit dem nachfolgenden Code nicht  die LED's 1 und 2 zu Blinken 
kriege?
Ich suche auch noch eine Möglichkeit mal eine Libraries von extern in 
das AtmelStudio6.1 zu integrieren was ich aber anscheinend nicht 
verstehe.
Bitte jetzt nicht einfach auf eine englische Seite verweisen denn da bin 
ich einen echte Niete!
Ich versuch C zu lernen damit ich mir meine µControler selbst 
programmieren kann. Ich hab mal einen Videokurs von Java mitgemacht und 
der war auf deutsch, das ging super. Aber in C hab ich noch nichts 
vergleichbares gefunden.
Vieleicht weis einer ja  eine Seite wo man C auch auf deutsch erklärt 
kriegt?
hier erst mal der Code:
1
/*
2
 * LCD_Test.c
3
 *
4
 * Created: 14.02.2014 23:29:37
5
 *  Author: Fritz
6
 */ 
7
#define F_CPU 8000000UL
8
9
#include <avr/io.h>
10
#include <util/delay.h>
11
//#include <lcd.h>
12
13
#define LED0 (1<<PD0)
14
#define LED1 (1<<PD1)
15
#define LED2 (1<<PD2)
16
#define LED3 (1<<PD3)
17
#define LED4 (1<<PD4)
18
#define LED5 (1<<PD5)
19
#define LED6 (1<<PD6)
20
#define LED7 (1<<PD7)
21
#define pause _delay_ms(20)
22
23
24
int main(void)
25
{
26
   DDRD = 0xff;
27
   PORTD =0b11111111;
28
    while(1)
29
    {
30
      
31
    PIND |= (LED0 |LED1 | LED2 | LED4 | LED6);
32
    pause;
33
    PIND &= ~(LED1);
34
    PIND &= ~(LED2);
35
    PORTD ^= LED3;
36
    PORTD ^= LED4;
37
    PORTD ^= LED5;
38
    PORTD ^= LED6;
39
    PORTD ^= LED7;
40
    
41
    
42
   // PORTD ^= PORTD ;
43
    
44
   
45
    }
46
}

von Joschua C. (Gast)


Lesenswert?

Von PIND liest du, wenn du einen Taster lesen möchtest etc.
Wenn du eine LED blinken lassen möchtest, schreibst du auf PORTD.
Du schreibst den Zustand der LED's 1 und 2 in PIND, nicht in PORTD, 
weshalb der Controller das Resultat nicht an den LED-Ausgang anlegt.

PORTX Wenn du ein Signal ausgeben willst
PINX Wenn du es einlesen willst.

Wenn du in deinem Programm etwas von PORTX einliest, bekommst du an dem 
jeweiligen Pin eine 1 wenn der Controller gerade die LED zum leuchten 
bringt, und eine null wenn er sie gerade ausschaltet. Das nutzt

   PORTD ^= LED7;

Hier wird die aktuelle Ausgabe vom Controller an PORTD eingelesen und 
anschließend wird mit PORTD das gemacht:

PORTDvorher LED7 | PORTDnachher
0             0  |  0
0             1  |  1
1             0  |  1
1             1  |  0

Steht an der Bitstelle in LED7 eine 1, so wird das gleichwertige Bit in 
PORTD umgekehrt.


Siehe auch hier:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
Das Tutorial ist Gold wert. Auch wenn du C lernst, ein Blick in die 
Assembler-Grundlagen lohnt.

http://openbook.galileocomputing.de/c_von_a_bis_z/000_c_vorwort_001.htm
Gutes C-Tutorial auch als Handbuch zu gebrauchen.

von Fritz B. (kleinfritzchen)


Lesenswert?

Danke das hat mir erstmal sehr geholfen!
Wo finde ich mal eine Beschreibung wie man fremde .h und .c dateien in 
mein Projekt einfügt?
Konkret geht es um Dateien die man zum verwenden eines LCD verwenden 
kann?
Ich hab bisher nur infos auf englisch gefunden mit denne ich aber nichts 
anfangen konnte.  Sinnvol wäre eine Bechreibung wie das ganze mit dem 
Kompiler linker funktioniert und wie man dort fremde Bibiotheken 
einbinden kann.

Mfg Fritz

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.