Forum: Mikrocontroller und Digitale Elektronik Anfängerin -> Erster Programmversuch funktioniert nicht


von Lisa (Gast)


Lesenswert?

Hallo Experten!

Habe gerade mein erstes Programm mit einem MEGA32L zu Testzwecken 
geschrieben. Leider funktioniert es nicht! An Port A.0 liegt an 
PWM-Signal an. Dieses soll zu Port A.7 "Durchgeschliffen" werden.
Hier der Programmausschnitt(COdeVisionAVR):
1
// Input/Output Ports initialization
2
// Port A initialization
3
// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
4
// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=P 
5
PORTA=0x01;
6
DDRA=0x80;
7
8
...
9
10
while (1)
11
      {
12
      // Place your code here  
13
      if(PORTA.0==0){ 
14
        PORTA.7=1; }
15
      else {
16
        PORTA.7=1;
17
        }  
18
...

Port A.7 gibt aber hat aber dauerhaft das den Zustand high. An A.0 liegt 
ein PWM-Signal mit 200Hz.

Jemand eine Idee warum das nicht funktioniert?

Grüßle

von Lisa (Gast)


Lesenswert?

Soll natürlich
1
while (1)
2
      {
3
      // Place your code here  
4
      if(PORTA.0==0){ 
5
        PORTA.7=1; }
6
      else {
7
        PORTA.7=0;
8
        }

heißen

von Gast (Gast)


Lesenswert?

if(PORTA.0==0){
        PORTA.7=0; }

?

von Sven P. (Gast)


Lesenswert?

PORTA --> PINA !

von Helmut L. (helmi1)


Lesenswert?

>      if(PORTA.0==0){

ersetze das mal durch PIN

Port dient nur zur Ausgabe , zur Eingabe musst du Pin brauchen

Gruss Helmi

von Gast (Gast)


Lesenswert?

while (1)
      {
      // Place your code here
      if(PINA.0==0){
        PORTA.7=0; }
 else {
        PORTA.7=1;
        }

?

von Wolfgang M. (womai)


Lesenswert?

Koennte es sein, dass die Schleife einfach zu langsam ist? Ich hab' 
keinen AVR-Compiler (arbeite immer mit Microchip-uCs), aber ich denke 
die Schleife sind so ca. 20 Assemblerbefehle. Bei 4 MHz Taktrate 
(welcher Taktrate verwendest Du wirklich?) und 1 Befehl pro Takt ist die 
Schleifenfrequenz so 200 kHz. Kann also sein, dass der uC immer gerade 
dann den Zustand des Eingangspins ueberprueft, wenn er "high" ist.

Zum Testen am besten einfach einmal ein statisches Signal von einem 
Schalter an den Eingang anlegen (1 bzw. 0), oder mit einem an den 
Eingang angschlossenen Draht abwechselnd GND und VCC beruehren und 
sschauen, ob der Ausgang folgt. Wenn das geht, dann mal ein langsameres 
PWM-Signal einschleifen (z.B. 1 kHz).

Wolfgang

von Lisa (Gast)


Lesenswert?

Oh Mann!Natürlich, Pin muss das heißen. Da hatte habe ich vor lauter 
Baumen den Wald nicht gesehen!
Dank an alle für die Hilfe!

von Helmut L. (helmi1)


Lesenswert?

Das PWM Signal beträgt 200Hz  das sollte er schon schaffen.

von Wolfgang M. (womai)


Lesenswert?

Ooops, ich habe kHz statt Hz gelesen! Ja, 200 Hz ist nicht besonders 
schnell.

Wolfgang

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

warum überhaupt diese 1:1 "Umcodierung" mit dem if .. (then) .. else ?

Warum nicht PORTA.7=PINA.0   ??

von Michael H* (Gast)


Lesenswert?

> Anfängerin -> _*Erster*_ Programmversuch funktioniert nicht
deswegen...

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.