Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: AVR32 PortRead Kategorie: Programmierung Basic (von Torsten - 1.10.2017 12:25)
Als Antwort auf Re: AVR32 PortRead von nadine_P - 29.09.2017 12:59

> > Hallo Nadine,
> >
> > ich nehme an das es das nicht mehr gibt da die Ports der AVR32 32-Bit lang sind
> > und nicht wie beim MEGA 8-Bit. Dort hat dann ein Port in ein Byte gepasst. 32 Bit
> > wären ja schon eine FLOAT-Zahl.
> >
> > Mir würde nur die Möglichkeit einfallen, dass Du Dir 8 Eingänge eines Ports raussuchst
> > und diese 8 Eingänge einzeln mit Port_ReadBit einliest. Aus diesen 8 musst Du Dir
> > dann Dein eigenes Byte zusammensetzen.
> >
> > VG, Tobias
> >  
> >
> >
> > > Hallo zusammen,
> > >
> > > das ist mein erster Forumeintrag und ich hoffe das mir jemand helfen kann.
> > >
> > > Ich benutzte für ein Projekt die AVR32 Unit mit der ich eigentlich sehr zufrienden bin.
> > > Zuvor habe ich für andere Projekte das Mega 128 Board genutzt.
> > >
> > > Jetzt stoße ich leider mit der AVR32 Unit auf ein Probelm was ich vorher nicht bedacht habe,
> > > und zwar das Auslesen eines ganzen Ports.
> > >
> > > Das war mit dem Mega 128 nicht das Problem, mit der Zeile:
> > >
> > > - ReadPort A  ' ,wurde der Port eingelesen und als Byte etc. zurückgegeben.
> > >
> > > Aber wie realisiere ich das jetzt mit der AVR32 Unit?
> > > Weil hier gibt es diese Function nicht mehr.
> > >
> > > Danke schon mal im voraus
> > >
> > >  
> Hallo Tobias,
> Danke für deine schnelle Antwort.
> Ich habe das Ganze jetzt mal probiert mit den einzelnen Bits einlesen.
> Hier ist der Code dazu:
>
>  'Datenrichtung der Pins als Input deklarieren
>     Port_Attribute(P19, PORT_ATTR_INPUT)
>     Port_Attribute(P20, PORT_ATTR_INPUT)
>     Port_Attribute(P21, PORT_ATTR_INPUT)
>     Port_Attribute(P22, PORT_ATTR_INPUT)
>     Port_Attribute(P23, PORT_ATTR_INPUT)
>     Port_Attribute(P24, PORT_ATTR_INPUT)
>
> 'zur Übersicht werden die Pin Einlesebefehle als Bit-Stelle definiert
>     #define BIT_0  Port_ReadBit(P19)
>     #define BIT_1  Port_ReadBit(P20)
>     #define BIT_2  Port_ReadBit(P21)
>     #define BIT_3  Port_ReadBit(P22)
>     #define BIT_4  Port_ReadBit(P23)
>     #define BIT_5  Port_ReadBit(P24)
>
> 'Mit Bitschiebeoperator werden die einzelnen Pin Zustände an ihren Index gesetzt
>         PortWert =  ((BIT_0 << 0) Or (BIT_1 << 1) Or (BIT_2 << 2) Or (BIT_3 << 3)Or (BIT_4 << 4)Or (BIT_5 << 5))
>

>
> Das Ganze funktioniert soweit auch,
> aber ich habe trotzdem noch ein kleines Problem.
>
> Ich möchte damit ein 6 Bit Signal einlesen welches binär von 0 - 49 zählt
> mit einer Frequenz von 2500Hz.
>
> Ich habe mir die Zahlenreihe ausgeben lassen und es wird wie erwartet von 0 - 49 durchgezählt.
> Bis auf einige Ausreißer, die Ausgabe sieht z.B. dann so aus:
> 0,0,1,1,3,2,3,3,4,4,...
>
> die 3 ist hier der Fehler und meine Vermutung ist,
> daß während des einzeln Bit einlesens, gerade um +1 hochgezählt wird und somit ein,
> sozusagen gemischtes Signal eingelesen wird.
>
> Ich hoffe man kann mir folgen bei der Problematik wie ich sie hier dargestellt habe.
>
> Meine Frage ist, ob ich mein Code irgendwie verbessern kann um das zu verhindern.
>
> gruß nadine
>
>
>  

Hallo Nadine,

die inkonsistenten Daten wirst du nicht mit Codeoptimierung
wegbekommen. Deine Inputquelle muss einen Trigger geben wann
ausgelesen werden darf. Am besten dann in einem externen
Interrupt auslesen.

Gruß Torsten


 byte by_bit        = 0x01
 byte by_port_value = 0x00;
 for(byte by_port_bit = P19; by_port_bit <= P24; by_port_bit++)
    {
    if(Port_ReadBit(by_port_bit)
        by_port_value = by_port_value | by_bit;

    by_bit = by_bit << 1;
    }




    Antwort schreiben


Antworten: