Forum: Compiler & IDEs Bewegungsmelder AVR programmieren


von Katie M. (katie)


Lesenswert?

Hallo zusammen,
Ich muss das AVR-Programm für Bewegungsmelder mit Atmega32 schreiben.
Das geht darum, dass die LED bei Annäherung eines Menschen oder 
sonstigen Bewegungen ein Signal geben soll.Wenn man sich nicht 
bewegt(ohne Störung),bleibt die Lampe auf grün (bei Spannung von 2 V)und 
umgekehrt wird die Lampe dann Rot (bei Spannung von 0 - 4 V) und wird 
gespeichert und gezeigt wann die Lampe Rot war.
Kann mir jemand vielleicht helfen?

von Rolf Magnus (Gast)


Lesenswert?

> Kann mir jemand vielleicht helfen?

Dazu müßtest du erstmal eine konkrete Frage stellen.

von Captain S. (captainsubtext)


Lesenswert?

Hallo Katie,

hast du bereits einen passenden Sensor für die Entfernungsmessung 
ausgewählt?
Hast Du bereits einen Schaltplan für deinen Bewegungsmelder gezeichnet?
Hast Du Vorkentnisse oder bist Du absolute Anfängerin?
Hast Du dir überlegt, woher du Uhrzeit/Datum bekommst?
Wobei genau sollen wir jetzt helfen?

Irgendwie klingt die Projektbeschreibung für mich so, als ob Du dich 
damit total verhoben hast! Oder eben Hausaufgaben :)

von Katie M. (katie)


Lesenswert?

Captain Subtext schrieb:
> hast du bereits einen passenden Sensor für die Entfernungsmessung
> ausgewählt?

Im Labor (in der Uni) wird ein Infrarotsensor und DuoLED verwendet.

> Hast Du bereits einen Schaltplan für deinen Bewegungsmelder gezeichnet?

Den Schaltplan haben wir gegeben. Siehe: 
http://www.rn-wissen.de/index.php/Bild:Rncontrol1.4schaltplan.gif

> Hast Du Vorkentnisse oder bist Du absolute Anfängerin?

Es ist ein sehr neues Gebiet für mich ;)

> Hast Du dir überlegt, woher du Uhrzeit/Datum bekommst?

ich weiß es leider nicht.

> Wobei genau sollen wir jetzt helfen?

Was ich bislang geschrieben habe (und nicht mehr weiter komme) ist 
folgendes:
1
#include<avr\io.h>
2
3
int main ()
4
{
5
int n;
6
7
DDRB=0b00000011; //Datenrichtungsregister mit Bit 0,1 als Ausgang
8
OCR0= 0x00;      //Vergleichsregister
9
PORTB= 0x00;     //Ausgang auf 0 initialisieren
10
  while (1){
11
   for(n=0; n<=4; n++){  //Spannung von 0-4V
12
   if(n==2){             //wenn U = 2 V
13
    OCRO = 0x00;        //PB0 --> Rote LED aus
14
    PORTB=0b00000010;   //PB1 --> grüne LED an
15
    }
16
   else{                
17
   OCR0=0xFF;           //PB0--> Rote LED an
18
   PORTB=0b00000000;    //PB1--> grüne LED aus
19
   }
20
   }}

Mit dem Programm funktioniert es jedenfalls nicht ;-)
Kann mir vielleicht jemand sagen, welche weiteren Parameter ich in dem 
Quellcode berücksichtigen muss?
Ich hänge irgendwie etwas in der Luft...

Danke

von Rolf Magnus (Gast)


Lesenswert?

Wie kommst du auf die Idee, daß OCR0 die rote LED einschalten könnte? 
Die wirst du genau wie die grüne über PORTB ansteuern müssen.

> Mit dem Programm funktioniert es jedenfalls nicht ;-)

Etwas präziser wäre gut. Was war die Erwartung, was passiert 
stattdessen? So wie dein Programm jetzt ist, dürfte die grüne LED mit 
einer sehr hohen Frequenz (schneller als das Auge sehen kann) blinken, 
da die for-Schleife in wenigen Mikrosekunden komplett durchläuft.

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.