Hallo,
Gibt es eine Möglichkeit, dass ein ATMega durch die Pins gesteuert wird,
also bspw. dass beim Anliegen von 0x00 an Port C "ldi" gespeichert, dann
Port C auf einen anderen Wert gesetzt wird, z.B. 0x01, und
schlussendlich wieder geändert wird, z.B. auf 0x10, sodass der Befehl
1
ldi r17, 0x10
ausgeführt wird?
Anderes Beispiel:
An Port C liegt 0x01 an. Es wird der Befehl:
1
NOP
Natürlich könnte man das mit Mehrfachverzweigung, wie im Tutorial
beschrieben machen, aber bei über 100 Befehlen kann ich mir nicht
wirklich vorstellen, dass das schnell ist...
Hat jemand eine Idee?
Die AVRs können Befehle ausschließlich aus dem Flash ausführen. Für
Befehlswörter gibt es keinen anderen Datenpfad, das sieht die
Architektur nicht vor.
Vielleicht schilderst Du, was Du erreichen willst (anstelle eine Lösung
anzufragen, die nicht geht).
Mit µCs habe ich noch nicht so viel gemacht. 3-4 kleine "Projekte"
(Lauflicht, eine Art Eieruhr mit 7 Segmentanzeigen, ...)
@Hc Zimmerer:
Kann man es nicht bspw. so machen:
1
in r16,PINC
2
vergleich:
3
cpi r16,1 ;wenn die Eingangspins von
4
brne zweig_0 ;PINC auf 0b00000001 stehen
5
nop ;führe "nop" aus
6
;falls nicht, springe zu zweig_0 und
7
;prüfe auf eine andere bekannte Kombination
8
zweig_0:
9
...
Das ist natürlich bei mehr als 100 möglichen Befehlen nicht wirlich
schnell, daher wollte ich wissen, ob es dafür eine andere Möglichkeit
gibt.
Du hast jetzt zweimal geschrieben was du machen willst, aber es ist
immer noch nicht klar. Wenn du anhand des Pinstatus hundertfach
verzweigen willst, dann musst du das tun. Ein Array von Funktionszeigern
wäre evtl. noch was. Oder halt gleich eine Hochsprache mit halbwegs
übersichtlichem Switch/Case-Gerödel.
Es wird immer noch nicht deutlich, was Du erreichen möchtest. Was ist
damit gewonnen, wenn Du einen NOP ausführen lässt? Dass der geht und
was der macht, ist bekannt.
Wenn Du einen Befehlsinterpreter aufbauen willst, gibt es bestimmt
einfachere Befehlssätze als den des AVR. Es ist auch nicht so, dass Du
ein Byte anschauen kannst, damit den Befehl hast, und das nächste das
Argument ist. Die Bits sind - sowohl die Varianten des Befehls als auch
die Argumentbits - ineinander verschachtelt.
Und - egal, was für einen Befehlssatz Du Dir sonst ausdenkst - Du wirst
noch einen Handshake machen müssen. Einfach mal 8 Bit Daten anlegen und
danach andere ist ohne einen solchen nicht möglich. Du musst schon
sagen, wann die Daten gültig sind und erfahren, wann verarbeitet. Das
nur für den (sehr theoretischen) Fall, dass das Ganze wirklich sinnvoll
ist.
@Thomas B.:
Ich habe die Antwort von Hc Zimmerer, insbesondere diesen Teil
> anstelle eine Lösung anzufragen, die nicht geht
so aufgefasst, dass er damit sagen will, dass es nicht möglich ist
soetwas zu machen, deshalb nochmals die Erklärung bzw. den Code.
@Hc Zimmerer:
Das mit dem NOP war nur ein Beispiel, und dass das ohne Handshake nicht
gehtm, war mir schon von anfang an klar.
läuft
selbst wenn du nichts machst ...macht er was
und an einem eingang 8bit einlesen .. und an einem anderen was ausgeben
..
das macht der im schlaf
frage ist ... was soll der µC dann tun ?
eingang == 0x10
speichere 0x10 im register ( variable = sowieso ...
und dann ???
irgendwas soll der ja schon machen .. oder nicht ?
was istalso die aufgabe des µC ?
Nimm keinen AVR, sondern ein Ding, was Code ausm RAM ausführen kann.
Dann brauchst du nur eine Art Bootloader, ziehst dir deine Anweisungen
von der CF in den RAM rüber und führst sie dort aus.
> Der µC soll von einer CF-Karte, bzw. CF Leser gesteuert werden.
Kein Problem: Schreib oder hol dir ein Programm für den AVR, das von CF
lesen kann. Der liest das gewünschte Programm in der CF, speichert es in
das Flash des AVRs und führt es aus.
was ist für dich von CF gesteuert werden ?
ein auf der CF karte befindliches programm oder sind dort nur in einer
text oder binärdatei irgendwelche befehle ?
wenns nen programm ist : bootloader schreiben und fertig
wenns nen befehlslisting ist ...
auslesen und ausführen
jab schrieb:
> Hat jemand eine Idee?
Manche Arduino-Leute machen eine "Steuerung von außen" über eine
serielle Verbindung und eine Shell, die auf dem Arduino läuft.
arshhttp://biot.com/arsh/bitlashhttp://bitlash.net/wiki/startbreakfast
(offline)
jab schrieb:
> Ich dachte da eher an etwas ... kleineres... ^^
Bifferboard (läuft unter Linux, ist Skriptfähig, kann von USB-Stick
booten, ..., ist schneller als ein AVR,...).