Hallo,
anderer. Ich weiß aber nicht genau wer das war. Meiner Meinung nach sogar
schon in Rente/Vorruhestand oder so - kann das sein ? oder irre ich mich da ?
und los gehts ...
Also es gibt bei größeren sogar noch mehr Ports. Ich glaube bis PortL geht
das bei den 100pinnern. Diese Ports (A bis ... L) sind die Standard digitalen
Ein- und Ausgänge des Prozessors. Die sind aber teilweise noch mit weiteren
Funktionen belegt. Manche Pins haben dann insgesamt bis zu 9 Funktionen.
zB beim Tiny85 der Pin 5 ...
PB0 / MOSI / DI / SDA / AIN0 / OC0A / nOC1A / AREF / PCINT0
Je nachdem, welche Funktionsblöcke (zB Timer, ...) man im Prozessor aktiviert
werden die Pins mit anderen Funktionen beschaltet. Man muß also schon
vorher etwas überlegen was man für seine Lösung für Funktionen benötigt
und danach dann die Schaltung aufbauen und die entsprechenden Funktionen
des Prozessors verwenden. Was der entsprechende Prozessor kann liest man
aber am besten im Datenblatt nach.
Die Pins sind also im Normalzustand mit der normalen Port-Funktion beschaltet.
Wenn man aber zB den USART-Sender aktiviert würde man die normale
Portfunktion an dem Pin abschalten und TxD auf diesem Pin aktivieren.
Mini-FAQ : Die Port-Register DDRx, PORTx, PINx (von mir)
und einmal für C-Programmierer von Nomis ...
GPIOs mit C
da sollte eigentlich alles über Standard-Portfunktionen erklärt sein.
zB so ... out DDRB,0x00 (schreibe 0x00(hex) in das DataDirectionRegisterB)
muß man es mit dem Umweg über ein anderes Register machen.
Darum zuerst den Wert in Register r16 laden und dann den Inhalt von r16
in das IO-Register DDRB schreiben. Ist so und läßt sich leider nicht ändern.
Der Prozessor hat IO-Register, normale Register und SRAM. Das hängt alles
miteinander zusammen ist aber doch mit verschiedenen Funktionen und
Möglichkeiten versehen. Das wirst Du sogar schon bei den normalen Registern
merken. r0..r15 sind gegenüber r16..r31 eingeschränkt und können bei
manchen Assembler-Befehlen nicht verwendet werden. Sieh dir mal die
Liste der Assembler-Befehle (AVR Instruction Set (151 pages, revision G, updated 7/08)) an.
Da sind für jeden Befehl die Möglichkeiten, verwendbaren Register, Zyklen,
Beispiele und Erklärungen drin. Hab ich beim Programmieren immer griffbereit
neben mir
Sieh auch mal hier ... http://www.avr-asm-tutorial.net/avr_de/index.html rein
da gibt es ein gutes Tutorial in deutsch ... beginner_de.pdf .
Die Hilfen im AVR-Studio sind auch nicht schlecht. Da lohnt es sich auch
reinzusehen.
oben schon erwähnt habe.
Also ein STK500 lohnt eigentlich immer wenn man etwas mehr machen will.
Er hat verschiedene Takt-Quellen, Die Sockel können schon alle möglichen
Prozessoren fassen, Die Ports sind alle auf Pfostenstecker rausgeführt,
es gibt eine einstellbare Referenzspannungsquelle, 8 LEDs und Taster und
man kann den Prozessor mit dem Parallel-Programmermodus wiederbeleben
wenn man sich mal mit den Fuses vollständig ausgesperrt hat. Dafür knapp
80,-eur auszugeben finde ich nicht viel. Man kann sich dann erst mal den
AVRISPmk2 sparen. Wobei ich den eigentlich auch nicht mehr missen möchte.
Knapp 35,-eur für den ist auch nicht die Welt.
Ach ja ... beim STK500 ist noch nen ATmega8515 mit bei. Man kann also
mit der Kiste gleich loslegen
Mittlerweile habe ich den AVRISPmkII , den STK500 , STK501 und STK503.
Damit kann ich also auch die 64- und die 100-pinnigen programmieren und
testen Beim STK501 ist ein ATmega128 dabei und beim STK503 ein
ATmega1280. Also immer mit "Testobjekt"
So ... erst mal genug getippt die Finger müssen erst mal wieder
abkühlen ... (@Oskar : der jüngere Kollege hat sich ausgetobt )
Gruß
Dino
an dich hab ich dabei überhaupt nicht gedacht ... da war noch irgendeinNun,
meinst Du den (fast) 60-jährigen?
OK.
Melde mich zur Stelle.
anderer. Ich weiß aber nicht genau wer das war. Meiner Meinung nach sogar
schon in Rente/Vorruhestand oder so - kann das sein ? oder irre ich mich da ?
Jaja .. Bei Assembler muß man teilweise "zwischen den Zeilen lesen"Hallo dino03,
bin wieder halbwegs fit.
Diese drei Routinen die Du mir da geschickt hast sind ja richtig toll!
Anfangs verstand ich wirklich nur Bahnhof, aber nach mehrmaligem Durchlesen,
denke ich, dass ich das sogar halbwegs begriffen habe. Ich musste zwar schon
um einige Ecken denken, aber ich glaube es wird heller, wenn auch nicht ganz.
Daher habe ich noch ein paar Fragen und bitte Dich um eine so gut verständliche
Antwort, wie die Erklärung bei den Befehlen (Kommentare)
und los gehts ...
1.kann jeder Port (A bis D) als Ein- oder Ausgangsport benutzt bzw. definiert werden
und wenn ja, woher "weiß" der µP dann welcher Port ein Ein- oder Ausgang ist?
Das muss man ihm doch irgendwie mitteilen, oder?
genau so in der Art ...Ports sind einmal vordefiniert für Standardaufgaben.
Hier mal in die Datenblätter reinschauen.
Zum andern konnen sie auch in gewissen Grenzen frei
als Ausgänge oder Eingänge und zwar Port-Bit-weise
konfiguriert werden.
Also es gibt bei größeren sogar noch mehr Ports. Ich glaube bis PortL geht
das bei den 100pinnern. Diese Ports (A bis ... L) sind die Standard digitalen
Ein- und Ausgänge des Prozessors. Die sind aber teilweise noch mit weiteren
Funktionen belegt. Manche Pins haben dann insgesamt bis zu 9 Funktionen.
zB beim Tiny85 der Pin 5 ...
PB0 / MOSI / DI / SDA / AIN0 / OC0A / nOC1A / AREF / PCINT0
Je nachdem, welche Funktionsblöcke (zB Timer, ...) man im Prozessor aktiviert
werden die Pins mit anderen Funktionen beschaltet. Man muß also schon
vorher etwas überlegen was man für seine Lösung für Funktionen benötigt
und danach dann die Schaltung aufbauen und die entsprechenden Funktionen
des Prozessors verwenden. Was der entsprechende Prozessor kann liest man
aber am besten im Datenblatt nach.
Die Pins sind also im Normalzustand mit der normalen Port-Funktion beschaltet.
Wenn man aber zB den USART-Sender aktiviert würde man die normale
Portfunktion an dem Pin abschalten und TxD auf diesem Pin aktivieren.
2.Was bedeutet DDRx (Data Direction Register), wird damit irgendwie festgelegt,
ob das ein Aus- oder Eingang ist?
so sieht das aus ... wie das genau geschieht kann man hier nachlesen ...Dazu gibt es Datenrichtungsregister für jeden Port DDRA für Port A
DDRB für Port B.
Diese können nicht direkt beschrieben werden, nur über den Umweg
Lade Wert in Temporärregister und dann Temporärregisterweret in Datenrichtungsregister.
Mini-FAQ : Die Port-Register DDRx, PORTx, PINx (von mir)
und einmal für C-Programmierer von Nomis ...
GPIOs mit C
da sollte eigentlich alles über Standard-Portfunktionen erklärt sein.
da man feste Werte nicht direkt in die I/O-Register schreiben kann ..3.bei allen 3 Beispielen die Du mir geschickt hast, steht:
(1) ldi r16,0x00 ; Wert für Port B - alles Eingänge
(2) out DDRB,r16 ; und setzen
(3) ldi r16,0xFF ; Wert für Port C - alles Ausgänge
(4) out DDRC,r16 ; und setzen
Das bedeutet doch für:
(1) Wert 0d wird in Register 16 geschrieben
(2) Alle Bits von Port B werden auf 0 gesetzt (was bedeutet hier DRB?)
(3) Wert 255d wird in Register 16 geschrieben
(4) Alle Bits von Port C werden auf 1 gesetzt (was bedeutet hier DRC?)
zB so ... out DDRB,0x00 (schreibe 0x00(hex) in das DataDirectionRegisterB)
muß man es mit dem Umweg über ein anderes Register machen.
Darum zuerst den Wert in Register r16 laden und dann den Inhalt von r16
in das IO-Register DDRB schreiben. Ist so und läßt sich leider nicht ändern.
Der Prozessor hat IO-Register, normale Register und SRAM. Das hängt alles
miteinander zusammen ist aber doch mit verschiedenen Funktionen und
Möglichkeiten versehen. Das wirst Du sogar schon bei den normalen Registern
merken. r0..r15 sind gegenüber r16..r31 eingeschränkt und können bei
manchen Assembler-Befehlen nicht verwendet werden. Sieh dir mal die
Liste der Assembler-Befehle (AVR Instruction Set (151 pages, revision G, updated 7/08)) an.
Da sind für jeden Befehl die Möglichkeiten, verwendbaren Register, Zyklen,
Beispiele und Erklärungen drin. Hab ich beim Programmieren immer griffbereit
neben mir
Sieh auch mal hier ... http://www.avr-asm-tutorial.net/avr_de/index.html rein
da gibt es ein gutes Tutorial in deutsch ... beginner_de.pdf .
Die Hilfen im AVR-Studio sind auch nicht schlecht. Da lohnt es sich auch
reinzusehen.
nein siehe den letzten Textblock und die FAQ von mir oder Nomis die ichDas würde heißen, wenn an Port C 8 LED's hängen leuchten die alle auf,
sofern nicht eine negierte Logik dazwischen hängt. Und es ist besser,
wenn man das so macht, weil wenn alle Bits von Port C = 0 wären,
weiß man nicht ob die LED's kaputt sind oder ein Ausgangsbit nicht geschaltet hat, oder?
oben schon erwähnt habe.
Mach ich doch gernAlso nochmal vielen Dank für Deine Mühe
Gruß dschi dschei
PS: Könntest Du ein STK 500 für einen blutigen Anfänger wie mich
empfehlen und wenn ja, benötigt man da noch Zubehör?
Also ein STK500 lohnt eigentlich immer wenn man etwas mehr machen will.
Er hat verschiedene Takt-Quellen, Die Sockel können schon alle möglichen
Prozessoren fassen, Die Ports sind alle auf Pfostenstecker rausgeführt,
es gibt eine einstellbare Referenzspannungsquelle, 8 LEDs und Taster und
man kann den Prozessor mit dem Parallel-Programmermodus wiederbeleben
wenn man sich mal mit den Fuses vollständig ausgesperrt hat. Dafür knapp
80,-eur auszugeben finde ich nicht viel. Man kann sich dann erst mal den
AVRISPmk2 sparen. Wobei ich den eigentlich auch nicht mehr missen möchte.
Knapp 35,-eur für den ist auch nicht die Welt.
Ach ja ... beim STK500 ist noch nen ATmega8515 mit bei. Man kann also
mit der Kiste gleich loslegen
Mittlerweile habe ich den AVRISPmkII , den STK500 , STK501 und STK503.
Damit kann ich also auch die 64- und die 100-pinnigen programmieren und
testen Beim STK501 ist ein ATmega128 dabei und beim STK503 ein
ATmega1280. Also immer mit "Testobjekt"
So ... erst mal genug getippt die Finger müssen erst mal wieder
abkühlen ... (@Oskar : der jüngere Kollege hat sich ausgetobt )
Gruß
Dino