www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik getch-Funktion


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:(....

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANN REDUZIERE DAS PROBLEM AUF EIN KLEINES PROGRAMM!
Ist das denn so schwer?

Autor: Andy (Gast)
Datum:

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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Das dann auch lesbar zu formatieren, wäre auch nett.

Autor: Andy (Gast)
Datum:

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

Autor: eklige Tunke (Gast)
Datum:

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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.