Forum: Mikrocontroller und Digitale Elektronik getch-Funktion


von Andy (Gast)


Lesenswert?

Hallo zusammen,

Hab ein sehr unplausibles Problem:).
Also ich möchte mit ner getch()-Routine ein Signal einlesen.
Dabei verharre ich in einer while-schleife, bis ein 
Interrupt(Start-Knopf) eintritt, oder an RXC ein Signal/Daten anstehen.
Das funktioniert soweit ganz gut, solange ich keine LED an Port PB3 
ansteuere.
Ich verstehe einfach nicht, warum PB3 mir den Empfangspuffer 
blockiert...

Ich arbeite mit dem AtMega32 und AVR Studio.

Schon mal danke im voraus


Hab hier mal meine getch()-Routine:

#include <avr/io.h>
#include "global.h"



#define Bereit_LED              PB3                        // LED 2


volatile uint8_t Interrupt_Flag;

unsigned char getch2 (void)
{
 #ifdef UCSRA

    while ( !(UCSRA & (1 << RXC)) && (Interrupt_Flag == 0));
            {
             PORTB |= (1<<Bereit_LED);
            }

 #else
     while ( !(USR & (1 <<RXC)));
 #endif
    PORTB &=~ (1<<Bereit_LED );
    return UDR;

}

von Karl H. (kbuchegg)


Lesenswert?

Andy schrieb:

> Ich verstehe einfach nicht, warum PB3 mir den Empfangspuffer
> blockiert...

Deine Analyse ist höchst wahrscheinlich falsch


>
> volatile uint8_t Interrupt_Flag;
>
> unsigned char getch2 (void)
> {
>  #ifdef UCSRA
>
>     while ( !(UCSRA & (1 << RXC)) && (Interrupt_Flag == 0));
>             {
>              PORTB |= (1<<Bereit_LED);
>             }

Die Idee dürfte sein, dass du eine LED leuchten lässt, solange getch2 
wartet.
Du siehst die LED aber nicht aufleuchten. Korrekt?

Sieh mal hier

>     while ( !(UCSRA & (1 << RXC)) && (Interrupt_Flag == 0));

der kleine ; ganz am Zeilenende


Siehe auch
Beitrag "Re: ADC will nicht"

von Andy (Gast)


Lesenswert?

ist leider nicht mein Problem:), da ich das Semikolon nur vergessen hab 
im Beitrag hier rauszulöschen.

Wenn ich die schleife per Interrupt verlassen möchte, oder die Led auf 
einen anderen Port lege, funktioniert alles einwandfrei:(....

von Karl H. (kbuchegg)


Lesenswert?

Andy schrieb:
> ist leider nicht mein Problem:), da ich das Semikolon nur vergessen hab
> im Beitrag hier rauszulöschen.

Ok.
Dann ist es auch nicht mehr mein Problem.

Code überträgt man immer mit Copy&Paste in ein Forum und niemals indem 
man ihn neu tippt. Sonst suchen die Leute nämlich Fehler, die nicht in 
deinem wirklichen Code enthalten sind.

Schönen Tag noch.

Ein Tip noch:
Dein Problem liegt dann nicht in der getch2 Funktion, sondern in den 
Codeteilen die du nicht zeigst.
Welche Schlüsse du jetzt aus diesem Tip ziehst ... das überlasse ich 
dir.

von Andy (Gast)


Lesenswert?

Heute schlechte laune hm?

Hab mit Copy&Paste gearbeitet, hatte aber da einige Änderungen drin, die 
nicht mein eigentliches Problem wiederspiegeln würden -> deshalb musste 
ich was ändern und deshalb ist der Fehler entstanden.

Den ganzen Quellcode kann ich dir leider nicht zeigen...
Ist erstens zu viel und zweitens teilweise Firmenintern.

Hab momentan den verdacht, dass sich Hardware-technisch ein Problem 
eingeschlichen hat. Das Problem wandert nämlich mit der Vedrahtung mit, 
wenn ich diese auf nen anderen Port ziehe.

kann ne lange suche werden...

von Klaus W. (mfgkw)


Lesenswert?

Andy schrieb:
> Heute schlechte laune hm?


Bei sowas bekommt man irgendwann schlechte Laune.
Ich bin in letzter Zeit auch gelegentlich auf Kollisionskurs :-)

Es macht einfach keinen Spaß, Leuten zu helfen, die nur Bruchteile
der Wahrheit erzählen:
- miese Beschreibung des Problems. tw. kaum zu entziffern
- keine Schaltungen
- nur Bruchteile von Quelltexten
- oder wie hier Quelltext, der so gar nicht benutzt wurde

Da kommt man sich irgendwann veralbert vor.

von Klaus W. (mfgkw)


Lesenswert?

Andy schrieb:
> Den ganzen Quellcode kann ich dir leider nicht zeigen...
> Ist erstens zu viel und zweitens teilweise Firmenintern.

Den will auch gar niemand sehen.
Mach dir doch die Mühe, das Problem auf ein kleines und
übersichtliches Programm zu reduzieren.
Wenn du das dann vollständig zeigst, kann man auch helfen.

Wenn du dir die Mühe nicht machen willst, wieso sollen
dann andere die Zeit sinnlos vergeuden mit falschen
Quelltextfragmenten?

von Andy (Gast)


Lesenswert?

Tut mir ja auch leid.
War ein kleiner Fehler von mir...aber kann ja mal vorkommen oder?

Kann halt nur nicht denn ganzen Quellcode hier einsetzen...gibt ja auch 
sowas wie Firmengeheimniss.
Kann ja ne Arbeit von Wochen nicht einfach so veröffentlichen.

Auch verständlich oder?

von Klaus W. (mfgkw)


Lesenswert?

DANN REDUZIERE DAS PROBLEM AUF EIN KLEINES PROGRAMM!
Ist das denn so schwer?

von Andy (Gast)


Lesenswert?

Hab nicht gesehen, dass du noch was geschrieben hast:)...

von Andy (Gast)


Lesenswert?

Könnt ich machen, hast recht...

Glaub aber momentan echt eher, dass es an der Hardware liegt...

ich setz später mal was rein ok?

von Klaus W. (mfgkw)


Lesenswert?

PS: Das dann auch lesbar zu formatieren, wäre auch nett.

von Andy (Gast)


Lesenswert?

Jetzt nicht zu viel auf einmal verlangen...ne, war Spass...mach ich 
dann.

von eklige Tunke (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> PS: Das dann auch lesbar zu formatieren, wäre auch nett.
und auch mal unter Formatierung nachschauen, mit
1
[c]C-Code[/c]
 kann man hier schön übersichtlich Quelltext einfügen, sogar in Farbe 
und bunt ;-)

von Andy (Gast)


Lesenswert?

So jetzt hat sich dass Problem gelöst. War anscheinend schlecht 
verlötet.

Trotzdem danke für die Hilfe,
und auch für eure Belehrungen:).

Nehmts mir Bitte nicht übel.

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.