PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anstehende Bits an einem Port mit Speicherinhalt vergleichen



Chris19
14.04.2006, 20:10
Hallo :-)

Ich bin Neu hier und wollte mich mit einer kleinen Frage auch gleich mal vorstellen.

Ich möchte einen ATMEGA16 zum auslesen und vergleichen eines Bytesignals benutzen. Am einem Port (zB Port C) soll ein Bitzustand anliegen den ich von einer externen Schaltung bekomme. Dieser Wert soll dann mit einem "Festen Wert" im Nichtflüchtigen Spiecher verglichen werden.

Ziel ist es bei Gleichheit des Signals eine LED zum leuchten zu bringen. Das mit der LED bekomm ich mittlerweile hin , doch habe ich Probleme den Port auszulesen und dann mit einer Speicherstelle zu vergleichen.

Zudem soll das Projekt erweitert werden um mehrere Bytes (so um die 30) mit der gleichen Anzahl an Bytes im Speicher zu vergleichen.


Ich hab schon viele Beiträge in diesem Forum gefunden aber keinen der sich so mit Diesem Thema beschäftigt.


Für Hilfe wäre ich dankbar .


Gruß

Chris

Rainerd
14.04.2006, 20:25
Hallo Chris,

Pseudocode


... blabla
.. blabla
Dim VergleichsVariable As Eram Byte ' Eeprom-Variable .. muss natürlich erst geschrieben werden
Dim Temp As Byte
Config Portc = Input ' Eingangsport
Config Portd = Output 'da hängen Deine LED's dran

Do
Temp=Pinc
If Temp = VergleichsVariable Then
Portd.0 = 1 ' Gleich, dann LED an
Else
Portd.0 = 0 ' Ungleich, LED aus
End If
Loop


Gruß.
Rainer

Chris19
14.04.2006, 21:03
Danke für die schnelle Antwort :-)

Ich hab zu den Code noch ne Frage.

In diesem Fall handelt es sich ja um 1 Byte das am Port C anliegt. Aber mal angenommen ich will eine Zeichenkette vergleichen....beispielsweise 10 Byte. Wie kann ich das realisieren ? Ich hab ja nur 8 Eingänge also kann ich quasi nur 1 Byte auslesen...oder ?


Gruß

Chris

Rainerd
14.04.2006, 21:10
Ja, so kannst Du nur 1 Byte auf einmal einlesen.
Ansonsten musst Du Dir ein Protokoll überlegen und die Daten seriell abfragen/lesen. Das muß die angeschlossene Hardware dann aber auch können, da die sich ja "unterhalten" müssen um zu wissen, wann wer sendet oder wann ein neues Byte anliegt .. nicht mehr so trivial. Damit baust Du mehr oder weniger den Druckerport eines PC's nach (zumindestens in Ansätzen).
Vielleicht ginge was mit 2 Ports des AVR's .. einer bekommt die Daten, der andere steuert den Datenstrom des angeschlossenen Geräts.
Kommt aber auf Deine Anwendung an.
Noch besser wäre es natürlich, die angeschlossene Hardware könnte ein Standardprotokoll (I2C/TWI, RS232, RS485, SPI, usw.).

Gruß.
Rainer

Chris19
14.04.2006, 21:17
OK... hab ich verstanden. :(

Wenn ich die 10 Byte seriell auf einem Pot einlesen würde (geht doch mit diesem "USART") , dann könnte ich die doch an eine Andere Stelle im Speicher schreiben und sie dann mit dem festen Wert im Speicher vergleichen. Wäre doch eine Möglichkeit..oder ?


Gruß

Chris

Rainerd
14.04.2006, 21:30
Yo, würde gehen.

Was mir gerade einfällt ... vll. geht ja was mit Portexpandern und Schieberegistern. Hab' da aber auch keine Lösung parat, wie man damit 10 8-Bit Hardwareausgänge auf einen 8-Bit Eingang schaltet.
Vll. wissen ja andere was dazu.

Gruß.
Rainer

Chris19
14.04.2006, 21:35
Also vom Prinzip her will ich einfach nur ein langes Datenwort mit dem Wert im Speicher des AVR vergleichen. Mein Problem war es ja, eine größere Anzahl Bytes in das EEProm zu schreiben. Das passt ja nun :-)

Anderererseits wüde ich es dann über die USART versuchen wollen. Wenn jemand nen Beispielcode hat wäre das sehr hilfreich.

Ich werde mich zudem hier im Forum umschauen.
Irgendwie muss das doch möglich sein....


Gruß

Chris