Forum: Mikrocontroller und Digitale Elektronik ein paar AT-Mega48 Fragen


von Simon Küppers (Gast)


Lesenswert?

Hallo,

ich hab letztens ein paar M48 bekommen. Die neusten Modelle von Atmel.
Allerdings wirft das Ding so einige Fragen auf, die ich mir selbst nich
erklären kann.

1. Die M48/88/168 Reihe hat angeblich einen Taktverdoppler. Nen Fusebit
dafür hab ich nicht gefunden. Nur eins um den Takt durch 8 zu teilen :-)
Wie aktivier ich den Taktverdoppler?

2. Das Ding hat ja 2 USARTs. Ein ganz "normalen" und ein "USART in
SPI-Mode". Nun frage ich mich, wie passt das zur Hölle zusammen?!
Rs232+SPI ? Wenn ich das richtig verstehe, wird das ganze nur wie ein
Software UART angesprochen, ist aber in wirklichkeit ein ganz normaler
SPI-Master ? Oder gibts da irgndnen neues Protokoll ? Ist das etwa
RS232 auf 3 Drähten?

3. PonyProg kann den M48 nicht programmieren, dabei fand ich das
Programm eigentlich recht gut. Ich mach das im Moment mit dem BASCOM
Programmer (schlagt mich, aber der funktioniert wenigstens ;))

4. Wo kann ich eine Übersicht finden, welche Register im erweiterten
Bereich liegen? Diese, die nur mit STS und LDS angesprochen werden
können? Raten kommt meist nich so gut.. :/

5. Warum ist da kaum ein kompletter Port dran, nur PORTD und PORTB sind
komplett. Allerdings ist in PORTB genau das Quarz angeschlossen und an
PORTD ist RxD und TxD für die serielle. ;)

Letzte Frage nich ganz so ernst nehmen ;)

Hoffe auf Antworten, danke im Vorraus

von Matthias (Gast)


Lesenswert?

Hi

zu 1.
Da kann ich nichts dazu im Datenblatt finden. Wo steht denn da was von
Taktverdopplung?

zu 2.
Das Ding hat WIDRS nur einen UART. Dieser kann entweder als ganz
normaler UART oder aber als Master SPI-Schnittstelle arbeiten.

zu 3.
Und deine Frage war jetzt?

zu 4.
Endlich darf ich wieder mal -> RTFM ;-) kleiner Tip: Ab Seite 334 wirst
du fündig.

zu 5.
Weil mehr als 2 komplette Ports garnicht möglich sind wenn man noch 5
Signale (Vcc, GND, AVcc, AGND, AREF) im DIP28 unterbringen muß?

Matthias

von DirkD (Gast)


Lesenswert?

Hallo!

Die einfache Antwort wäre: Datasheet lesen

Die ausführlichere:

1. Wo hast Du das gelesen?

Es gibt einen Precaler mit dem sich die Sys-Clk "teilen" läßt. (2er
Potenzen 2^0 bis 2^8)

2. Dazu gibt es extra eine Application Note von Atmel
Using the USART on the ATmega48/88/168 as a SPI master

Das sollte Deine Fragen beantworten.

Im Datasheet gibt es auch einen Beitrag dazu. Wenn ich das richtig
verstehe, bekommst Du einfach einen weiteren SPI-Master. Dazu wird der
USART "mißbraucht".

TX wird zu MOSI
RX wird zu MISO

Die Clk liegt auf Pin PD4 (Nr. 6 im DIP) Und ChipSelect mußt Du Dir
selbst bauen.

3. Autor von PonyProg fragen ;-)

4. Auch im Datasheet. Kapitel 28 "Register Summary"

5. Es ist eigentlich klar, daß erst einmal die Spezial-Pins
"rausgeführt" werden und nur wenn etwas übrig bleibt wird noch ein
General-IO Port auf Pins "gelegt".

von Simon Küppers (Gast)


Lesenswert?

1. Im Datenblatt steht:

– Up to 20 MIPS Throughput at 20 MHz
– On-chip 2-cycle Multiplier

Das hab ich dann mal ganz frech als Taktverdoppler angesehen ;)

2. Einen ganz einfachen SPI-Master ? Ist ja langweilig! :-)

3. Die Frage war eigentlich, warum der Mega48 nicht mehr unterstützt
wird. Klar, er ist neu, aber im Forum sind schon recht alte Beiträge,
wo nach Unterstützung gefragt wurde :( Habt ihr ne Alternative dazu?

4. Ich könnte schwören vorhin schonmal unter "Register Summary"
geguckt zu haben. Naja so ist das, wenn man keine Zeit hat ;)

5. Nunja, wenn ich jetzt unbedingt nen 8-Bit breiten Bus brauche,
müsste ich ja beispielsweise ein byte in seine Nibbles zerlegen und an
2 verschiedenen Ports ausgeben. Quasi 2 Ports "zusammenführen".
Braucht aber mehr Rechenleistung.

Naja, gut. Was ist denn nun dieser On-Chip 2cycle Multiplier ? Die
dritte Grundrechenart, die nur 2 Takte braucht?

Das "up to 20Mhz" heißt, ich kann da ein 20Mhz Quarz dran hängen?
Auch gut.

von Matthias (Gast)


Lesenswert?

Hi

1. Nein. Das ist der Hardware-Multiplizierer der die Multiplikation von
zwei 8 Bit Werten zu einem 16 Bit-Wert in gerade mal zwei Taktzyklen
erledigt. Das ist so richtig schnell für einen so einfachen Kern wie
den des AVR.

3. Frage das doch den Entwickler von PonyProg. Eine Alternative wäre
z.B. AVRDUDE. Da kannst du dir deine Prozessoren selber definieren.

4. Aber für einen Forenbeitrag hats gereicht?

Siehe 1.

Ja. 20MHz sind wohl kein Problem. Aber ob man das unbedingt braucht?

Matthias

von DirkD (Gast)


Lesenswert?

Hi!

@Simon:
Nur eine kleine Anmerkung:

Normalerweise fällt einem nicht plötzlich ein, daß man einen Bus
braucht. Erst die Anforderungen an die Anwendung ermitteln, dann das
Bauteil auswählen.

Wenn man es trotzdem allgemeiner will, dann nimmt man sich besser eine
AVR-Version mit mehr Pins.

Und nicht jeder braucht einen Quarz oder RS232 oder eine der anderen
Spezial-Funktionen. Man kann sich auch mit dem Mega48 einen Port
"freihalten".

Gruß

    Dirk

von Andi (Gast)


Angehängte Dateien:

Lesenswert?

@Simon Küppers: Damit Du nicht mehr raten mußt, im Anhang ein
Include-File mit IN- und OUT-Macros.
Habe alle mir erdenklichen Möglichkeiten reingepackt (siehe Anhang).
Ist die Register-Adresse > 0x3F werden STS- oder LDS-Befehle verwendet
ansonsten OUT oder IN.

MfG
Andi

von ...HanneS... (Gast)


Lesenswert?

Hi Andi...

Ich bezweifle, dass Simon schon bereit für Macros ist, da scheint es
noch an Grundlagen zu fehlen, z.B. am Verständnis der Adressbereiche
und der unterschiedlichen Zugriffsmöglichkeiten.

Mal davon abgesehen, dass beim Mega48 und seinen Brüdern die Verteilung
der I/O-Register auf die verschiedenen I/O-Bereiche nicht gerade optimal
gewählt wurde.

Vielleicht wäre ja ein 2313 oder Mega8 für den Einstieg in die
AVR-Technik besser geeignet. Da wären wenigstens erprobte
Programmbeispiele verfügbar gewesen.

Frohen Rest vom Osterfest...
...HanneS...

von Simon Küppers (Gast)


Lesenswert?

"Ich bezweifle, dass Simon schon bereit für Macros ist, da scheint es
noch an Grundlagen zu fehlen, z.B. am Verständnis der Adressbereiche
und der unterschiedlichen Zugriffsmöglichkeiten."

Nönö. Da is alles in Butter.
Mensch, nur gebt mir doch auch ma Zeit. Ich hab die Dinger gestern
bekommen und wie üblich mit OUT losprogrammiert ;) bis ich den Fehler
sah und hab mich hier mal informiert. Wollte nur wissen welche Register
mit STS geladen werden. wenn das alle über 0x3F sind, is doch gut,
dankeschön.

Das is nich mein Einstieg.. Ich hab vorher erfolgreich programmiert in
Assembler, auch wenn dies nicht so zu vermuten ist..

Das Makro brauch ich aber tatsächlich nicht. Ich mach das lieber per
Hand.

von Andi (Gast)


Lesenswert?

Na ja, ob er dazu bereit ist oder nicht weiß er vermutlich am besten.
Er muß ja das Include-File nicht nutzen und wenn jemand damit nicht
klar kommt dann einfach nur fragen (Sinn eines Forums).
Zumindest erleichtert das Include die Zugriffe auf die Register
erheblich bei Verwendung eines AVR mit Register-Adressen bis 0xFF.
Statt dem normalen OUT oder IN verwendet man einfach OUTR oder INR.
Bei Ausgabe von Konstannten (feste Werte) OUTI (Byte) oder OUTIW (Word,
z. B. für Timer1).
Ob OUT, STS, IN oder LDS entscheiden dann die Macros.

MfG
Andi

von Simon Küppers (Gast)


Lesenswert?

Das Problem ist die Lesbarkeit, ich programmiere nur Ab und Zu in
Assembler (sonst garnicht) und hab keine Lust auf so nen Stress mit
Makros ;)

Ach Übrigens, Auf die Frage mit den Portpins hatte ich auf etwas mehr
Ironie gehofft :-) So ernst war die Frage natürlich nicht. Es ist mir
natürlich zu 100% bewusst, dass man den AVR nach Anwendung auswählt
und nicht andersrum (entspräche sonst ja auch keiner gesunden
Menschen-Logik)

Bei mir ist es im Moment so, dass ich die nur etwas austesten will und
ein paar Standardanwendungen drauf laufen lassen will, wobei ich beim
Programmieren schon wieder so meine Probleme hab (siehe andern ATMEGA48
Thread).

Dann is ja alles OK. Danke soweit

von ...HanneS... (Gast)


Lesenswert?

Eben...

Das meinte ich mit (noch) fehlenden Grundlagen.

Übrigens suche ich mir den Controllertyp nicht nur nach der Anwendung
aus, sondern auch nach der Verfügbarkeit.

Frohen Rest vom Osterfest...
...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.