Hallo, ich bin neu hier.
Ich möchte mich in der nächsten Zeit mal mit der Programmierung eines
Atmega8 MC beschäftigen.
Dazu habe ich mir ein myAVR Board gekauft. An Software benutze ich
das AVR Studio 6. Einige Testprogramme habe ich auch
bereits zum laufen bekommen. Nur um zu sehen ob das Bord auch läuft.
Jetzt aber zu meiner Fragen.
Ich habe mal ein kleines Programm geschrieben welches nichts anderes
macht als beim einzelnen Betätigen der Taster an Port D2 und D4 soll die
rote und grüne LED an Port C0 und C3 leuchten. Beim Loslassen des
Tasters erlischt die entsprechende LED
Hier mal der Code dazu. ( Bitte ich bin Anfänger, auch in C )
/*
* zwei intelligente Lichtschalter.c
*
* Created: 08.10.2015 17:00:42
* Author: snwoball
*/
#include <avr/io.h> // Einbindung der allgemeinen
"io.h" Header-Datei
int main( void )
{
DDRD = 0b00000000;
PIND = 0b00010100;
DDRC = 0b00001001;
PORTC = 0b00000000;
while ( 1 ) // Endlosschleife,
{
if ( bit_is_clear ( PIND,2 ) ) {
( PINC,0 ) |= (1<<1); // Taster ist gedrückt
}
else {
PORTC,0 &= ~(1<<1); // Taster ist nicht gedrückt
}
if ( bit_is_clear ( PIND,4 ) ) {
( PINC,3 ) |= (1<<1); // Taster ist gedrückt
}
else {
PORTC,3 &= ~(1<<1); // Taster ist nicht gedrückt
}
}
Leider bekomme ich beim übersetzen den Fehler:
../zwei intelligente Lichtschalter.c:11: error: lvalue required as left
operand of assignment
Kann mir jemand weiterhelfen?
snowball schrieb:> Leider bekomme ich beim übersetzen den Fehler:> ../zwei intelligente Lichtschalter.c:11: error: lvalue required as left> operand of assignment
Dann steht da bestimmt auch, auf welche Zeile sich die Fehlermeldung
bezieht. Dahilft oft bei der Fehlersuche.
p.s. Wenn du deinen Code in C-Tags einschließt, passieren auch nicht so
hässliche Dinge wie
snowball schrieb:> #include <avr/io.h> // Einbindung der allgemeinen> "io.h" Header-Datei
snowball schrieb:> Kann mir jemand weiterhelfen?
Bestimmt. Hilfreich wäre es, wenn du dem Hilfswilligen das Leben etwas
leichter machen würdest.
Die Fehlermeldung sagt, dass in Zeile 11 etwas nicht stimmt. Welches ist
deine Zeile 11? Was steht dort?
Noch ein Hinweis: Eine Funktion (main), die als "gibt ein Integer
zurück" definiert ist, sollte das auch machen. Da wird der Compiler als
nächstes warnen/meckern.
snowball schrieb:> if ( bit_is_clear ( PIND,2 ) ) {> ( PINC,0 ) |= (1<<1); // Taster ist gedrückt
Bist du dir sicher, dass du PINC beschreiben möchtest? Normalerweise
liest man von einem PIN und schreibt in einen PORT.
snowball schrieb:> ( Bitte ich bin Anfänger, auch in C )
imho eine ganz blöde Entscheidung, C auf einem µC lernen zu wollen. Mach
dich erstmal am PC mit den C Grundlagen vertraut, dann wechsle zu µCs...
Ein C-Tutorial oder Buch wäre man ein Anfang...
snowball schrieb:> Kann mir jemand weiterhelfen?
Hallo,
ich verwende das AVR Studio 6 zwar nicht, aber trotzdem folgende
Hinweise:
Wie oben bereits geschrieben liegt der Fehler in Zeile 11.
Schaue in den Original Quelltext, um zu sehen welche Zeile genau
das ist (Leerzeilen und Kommentare zählen mit).
Demnach sollte dieses Zeile 11 sein:
DDRD = 0b00000000;
Da Du avr/io.h eingebunden hast, sollte er DDRD eigentlich
kennen, vorausgesetzt Du hast den richtigen Microcontroller
mit der Option -mcu angegeben, z.B. -mmcu=atmega328p
"lvalue required as left operand of assignment" bedeutet Du kannst
nur Variablen einen Wert zu weisen. Die Variable ist der linke Wert
(lvalue) der Zuweisungsoperation. Falls a eine Variable ist, ist
a = 1 erlaubt, 1 = a aber nicht, da 1 eine Konstante und keine
Variable und damit kein "lvalue" ist.
snowball schrieb:> ( bit_is_clear ( PIND,2 )
Was ist das?
Das ist ein Makro, dem 2 "Parameter" übergeben werden. Deswegen steht da
auch ein Komma.
snowball schrieb:> ( PINC,0 ) |= (1<<1);
Und was ist das?
Blödsinn.
Mal abgesehn davon, dass es PORTC heissen muss: Hier wird einem Register
etwas zugewiesen. Da hat ein ", 0" nichts verloren.
Guck dir im Tutorial an, wie das gemacht wird:
https://www.mikrocontroller.net/articles/Bitmanipulation
Und vergiss diese Makros, sondern mach das "zu Fuss". Wenn du das im
Schlaf beherrscht, kannst du auch die Makros verwenden.
Vorher solltest du allerdings an deinen C-Kenntnissen arbeiten. C lernt
man nicht nach der Copy & Paste + Trial & Error Methode.
mfg.