Forum: Mikrocontroller und Digitale Elektronik Display --> Mega8535 --> Mega32


von Sascha (Gast)


Lesenswert?

Hallo,

Habe ein kleines Programm für einen Mega8535 geschrieben, welches die 
Display-Routinen aus dem Tutorial dieser Seite benutzt. Jetzt bin ich 
auf einen Mega32 umgestiegen, und die Display-Ansteuerung funktioniert 
nun nicht mehr. Das Display(4x16) zeigt lediglich die beiden schwarzen 
Balken an.
Interrupts musste ich bis jetzt noch nicht verwenden, womit ich diesen 
Fehler ausschließen kann.
Vielleicht hatte ja jemand hier das gleiche Problem und kann mir 
weiterhelfen.

Danke
Sascha

von Falk (Gast)


Lesenswert?

Hast du die gleichen Ports verwendet? Gleichen Quarz? Sind die 
Pinbelegungen identisch?

MfG
Falk

von Sascha (Gast)


Lesenswert?

Ja, alles identisch.
Lediglich die uC getauscht und fertig...
Hatte nicht damit gerechnet, dass es komplikationen gibt. Habe auch eine 
multiplex-Tastatur dran, die zu funktionieren scheint.
Ist lediglich das Display, welches versagt. Steck ich den 8535 wieder 
ins Board, funktioniert alles...
Sehr suspekt, oder?

von Sonic (Gast)


Lesenswert?

Haste auch die Fuses umprogrammiert? Könnte es sein dass der Neue mit 
internem Takt (1MHz) arbeitet?

von Sascha (Gast)


Lesenswert?

Oh je,
Nicht schon wieder irgendwelche Fuses...
Also brennen tu ich das Ding mit Ponyprog. Angeschlossene LED's leuchten 
auch so, wie sie programmiert wurden. Scheint, als muss ich bei Null 
anfangen und das Board so umlöten, dass ich LED's für jedes Bit des 
ominösen Ports benutze um sicherzustellen, dass auch tatsächlich das 
rauskommt, was ich möchte.
Von Fuses habe ich ehrlich gesagt überhaupt keinen Plan. Das 
funktionierte ja auch mit dem 8535 wunderbar...

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Du mußt in den Fuses einstellen, dass er mit einem externen Quarz laufen 
muß, sonst wird es nicht funktionieren.
Wo man die in Ponyprog einstellt weiss ich leider nicht.
Umlöten mußt du sicherlich nichts, nur die Fuses richtig setzen, die 
sind im Datenblatt gut beschrieben.

Viel Erfolg,
Christian

von johnny.m (Gast)


Lesenswert?

Hast Du das für den 8535 compilierte (bzw. assemblierte) Programm 
einfach auf den Mega32 gespielt oder hast Du es für den Mega32 neu 
compiliert (bzw. assembliert)? Wenn nicht, dann wundert mich gar 
nichts...

von johnny.m (Gast)


Lesenswert?

Einer der wichtigsten Unterschiede liegt übrigens in der Speichergröße: 
Beim Mega8535 kann noch der komplette Programmspeicher mit relativen 
Sprüngen angesprochen werden, beim Mega32 nicht mehr. Deshalb 
funktioniert ein Programm, das für einen µC mit < 8 KB Flash geschrieben 
wurde und das rjmp-Befehle enthält (was eigentlich immer irgendwie der 
Fall ist), mit einiger Wahrscheinlichkeit nicht auf einem mit > 8 KB 
Flash. Dasselbe gilt für die Interrupt-Vektoren, die bei den AVRs mit > 
8 KB Flash aus eben diesem Grund 32 Bit lang sind. Da Du jedoch nach 
eigenen Angaben keine Interrupts benutzt, sollte das nicht zu Deinem 
Problem führen.

von M. M. (miszou)


Lesenswert?

Hi

du hast nicht zufällig das Display an Port C und zusätlich JTAG 
aktiviert?

Gruß MISZOU

von Sascha (Gast)


Lesenswert?

Hi,
Das Programm habe ich mit wavrasm geschrieben und assembliert. 
Selbstverständlich habe ich die Mega32-Standard-Routinen eingebunden.
Port C nutze ich tatsächlich zur Ansteuerung des Display's.
Den Controller programmiere ich mit PonyProg über ISP - JTAG-aktiviert? 
Sollte ich doch lieber zu Lego-Duplo greifen? ;)
Werd mal andere Sprungbefehle verwenden und hoffen, dass da 'der Frosch 
die Locken' hat.
Eben habe ich gesehen, wo man bei PonyProg die Fuses setzen kann - Das 
heißt also tatsächlich Datenblatt-wälzen... Meld mich, wenn ich schlauer 
bin.

von Volker (Gast)


Lesenswert?

Soweit ich weiss, ist beim ATMEGA32 im Auslieferungszustand JTAG immer 
aktiv. Zum Deaktivieren bei Ponyprog die JTAGEN-Fuse ausschalten.
Achtung: Haken bei Ponyprog bedeutet 0 => Fuse programmiert

Gruß Volker

von Sascha (Gast)


Lesenswert?

Ihr seid wahre Helden!!!
Bei Ponyprog das JTAGEN-Bit gelöscht, Programm rübergeschoben und siehe 
da --> Funzt!
Hip Hip - Hurra!
Danke für eure Tips!
Sascha

von Volker (Gast)


Lesenswert?

na also, wir freuen uns mit.

Volker

von Sascha (Gast)


Lesenswert?

Oh oh...
Soweit so gut.
DasProgramm lief wie gesagt. Allerdings eher in Zeitlupe - Also als 
Experimentierfreudiger Geselle mal eben die Duse-Bits so gesetzt, dass 
mein externes 8MHz Quarz benutzt wird --> Zack, aus die Maus...
Egal - nächster Mega32 ins Board --> Zeitlupe des Programmablaufes --> 
Fuses geändert --> Tot.
Lange Rede, kurzer sinn:
Der Dritte und letzte ist auch platt...
Schnell im Forum gesucht und siehe da, einen externen Quarz an xtal 
anschließen und es sollte sich wieder richten lassen. Aber ich habe doch 
bereits besagten 8MHz Quarz extern angeschlossen?!
Aus den Beiträgen werde ich nicht schlau. Gibts eine Rettung für meine 
AVR´s?

von Karl H. (kbuchegg)


Lesenswert?

Nicht einen externen Quarz anschliessen.

Da hast mit ziemlicher Sicherheit deine Mega32
auf externen 'Taktgenerator' eingestellt. Das ist aber
was anderes als ein externer Quarz.

In Kürze: Ein Quarz benötigt zum Schwingen noch etwas
Aussen-rum-Beschaltung. Diese Beschaltung ist im AVR
enthalten und braucht nur eingeschaltet werden.
Ein Taktgenerator hingegen braucht nichts. Der schwingt
ganz von Alleine, daher wird diese Aussen-rum-Beschaltung
abgeschaltet.
Genau das hast du gemacht, du hast deine Aussen-rum-Beschaltung
abgeschaltet. Nur ohne die kommt der Quarz nicht ins Schwingen.

Blöd ist jetzt nur, dass du das bei allen 3 Megas gemacht hast.
Ansonsten hättest du einen programmieren können, dass er einen
Pin toggelt. Mit diesem Signal gehst du dann an den XTAL1 Eingang
und die Megas sollten sich wieder melden. Alles was sie wollen
ist eine Frequenz an XTAL1, die schneller als 50 Hz ist :-)

Moment mal. Du hast doch noch einen 8535. Mit dem könntest
du das machen: Pin toggeln und mit diesem Takt die Mega32
versorgen (an XTAL1)

Ach ja: Die korrekte Fuse Stellung ist 'external Crystal'
nicht 'external Clock'. Im PonyProg heist das: Alle Haken
bei CKSEL0 bis CKSEL3 wegnehmen.


von Sascha (Gast)


Lesenswert?

Danke,
Das werde ich leider erst morgen in die Tat umsetzen können. Bin aber 
froh jetzt nicht die Vorräte von _ollin aufkaufen zu müssen!!!

Meld mich, sobald ich das Problem gelöst und das nächste erschaffen 
habe.
Nochmals vielen vielen Dank!
-Sascha

von Sascha (Gast)


Lesenswert?

So,
8535 setzt jetzt PortA,0 abwechselnd high - low.
Takt abgegriffen und Mega32 xtal zugeführt, aber nichts passiert...
werd mir wohl ein STK500 kaufen müssen. Damit kann ich die Mega32 doch 
auch wieder reanimieren, oder?

von Sonic (Gast)


Lesenswert?

Hast du's XTAL1 zugeführt? Und nicht vergessen: die ISP-Frequenz darf 
max. 1/4 der Taktfrequenz sein, sonst geht's nicht! Am Besten mit der 
niedrigsten ISP-Frequenz probieren.

von Sascha (Gast)


Lesenswert?

Aber wo stell ich die ISP-Frequenz ein?

von Sonic (Gast)


Lesenswert?

Welchen Programmer hast du? Bei Ponyprog kann ich nicht weiterhelfen, 
habe den AVRISP und STK500.

von Sascha (Gast)


Lesenswert?

Aha. Ich nutze leider wirklich Ponyprog. Da kann man derartige Optionen 
nicht einstellen. Hat denn das stk500 keinen ISP-Programmer onboard?
Kann man den avr-isp selbst löten? Habe mir extra ein zweites eva-board 
besorgt um den Takt für die 32er zu erzeugen. Aber wie es aussieht muss 
wirklich ein anderes Board für diese Fälle her.

von Sonic (Gast)


Lesenswert?

STK500 hat ISP onboard, aber auch Parallel und seriell High-Voltage, da 
braucht's keinen Takt am µC. Den AVR-ISP kann man wohl eher nicht löten, 
die Anschaffung lohnt sich aber auf alle Fälle! Hast du keinen 
Quarz-Oszillator, so 1 bis 4 MHz 'rumliegen? der tut's auch. Oder einen 
Frequenzgenerator. Man könnte auch die Soundkarte vom PC vergewaltigen. 
Frequenzen gibt's überall.

von Karl H. (kbuchegg)


Lesenswert?

> Da kann man derartige Optionen
> nicht einstellen

Doch kann man. Zumindest ungefähr.

Geh auf das Verzeichnis in dem du PonyProg installiert
hast. Dort gibt es eine PONYPROG2000.INI
Die machst du mit dem Notepad auf.

Dann suchst du den Eintrag
SPIBusSpeed
und setzt den mal auf SLOW

SPIBusSpeed=SLOW

von Sascha (Gast)


Lesenswert?

Bin mehr so der Hochspannungsmensch und im KV-Bereich zuhause. 
Beschäftige mich noch nicht so lange mit uC, weswegen ich auch nicht 
viel Krams rumliegen habe. Einen Takt erzeuge ich ja aber auch mit dem 
8535. Aber egal, wie ich die Frequenz auch einstelle, es tut sich 
einfach nichts bei den 32ern. Gibt es keine einfache Möglichkeit die 
Dinger zu resetten?
Oder ich kauf mir noch ne handvoll 32er. Muss ja nur noch meine 
Projektarbeit abschließen... ;)

von Sonic (Gast)


Lesenswert?

Kennst du niemend mit einem STK500 oder einem Programmer wie z. B. GALEP 
in deiner Nähe? Damit geht's am Einfachsten.

von Karl H. (kbuchegg)


Lesenswert?

> Gibt es keine einfache Möglichkeit die
> Dinger zu resetten?

Bedenke. Der Lösungsvorschalag beruht auf der geratenen
Annahme, dass du die Fuses auf externen Oszillator gestellt
hast. Diese Annahme trifft oft zu, muss aber nicht.
Weist du noch, wie du die Fuses gestellt hast?

von Sascha (Gast)


Lesenswert?

IHR SEID SO GUT!!!!
Muss nur mal eben alles testen, meld mich gleich wieder. =)

von Karl H. (kbuchegg)


Lesenswert?

> So, 8535 setzt jetzt PortA,0 abwechselnd high - low.

Nicht das ich dir nicht trauen würde :-)

Bist du sicher, dass das auch funktioniert. Mit nem
Multimeter nachgemessen? Du müsstes so ungefähr 2.5 Volt
am Ausgang messen können.

Das dann auf Pin 13 vom Mega32.
Pin 12 lässt du offen.

von Jochen S. (jochen_s)


Lesenswert?

So mein Vorschlag wie ich das immer mache, ich besitze ein Multimeter 
mit Frequenzgenerator der spuckt zwar nur hausnummern aus aber egal das 
sind halt ein paar Kilohertz es langt aber, dann holst du dir von 
ROWALT.de den twinavr und baust diesen ganz kleine aus drei widerständen 
bestehenden Parallelportprogrammierer auf und schliest das an die Masse 
vom Multimeter schliesst du an Masse bzw. 0V an den Plus an den Xtal 1 
dann kannste mit twinAVR soweit drauf zugreifen, dass man die Fuses 
ändern kann.

Wenn du kein solch ein Multimeter hat tuts auch ein NE555 in 
Standardbeschaltung im Internet gibts seiten über die man di ungefäre 
Frequenz errechnen kann.


Gruss JOCHEN S.

www.RS485-Hausbus.de.vu

von Sascha (Gast)


Lesenswert?

So, Mega32 laufen wieder. Allerdings nur mit der externen Taktleitung. 
Muss mal eben noch das Datenbaltt nach den richtigen Einstellungen für 
das externe Quarz durchforsten...

von Karl H. (kbuchegg)


Lesenswert?

@Jochen

Ich hoffe du verzeihst mir, aber ich hab da mal ein paar
Satzzeichen eingefügt. Ohne die versteht Sascha wahrscheinlich
nur Bahnhof. Ich hab das ganze auch 3 mal lesen müssen und
nur mit dem Wissen, was du wahrscheinlich machen wirst, ist
es gelungen die Beschreibung zu entziffern.

> ich besitze ein Multimeter mit Frequenzgenerator. Der spuckt zwar
> nur hausnummern aus, aber egal das sind halt ein paar Kilohertz
> es langt aber. Dann holst du dir von ROWALT.de den twinavr und baust
> diesen ganz kleine aus drei widerständen bestehenden
> Parallelportprogrammierer auf und schliest das an. Die Masse
> vom Multimeter schliesst du an Masse bzw. 0V an. Den Plus an den
> Xtal 1. Dann kannste mit twinAVR soweit drauf zugreifen, dass man
> die Fuses ändern kann.


von Karl H. (kbuchegg)


Lesenswert?

> So, Mega32 laufen wieder.

Na siehst du.

Im PonyProg die Haken bei allen CKSELx wegnehmen.
Achtung: Nicht vergessen. Bevor du an den Fuses rumspielst
immer zuerst die Fuses vom Controller lesen!

von Sascha (Gast)


Lesenswert?

Ja, werd ich machen.
Dank Euch läuft nun alles wieder!!!!!!!!!!!!!!!!!!!!!!!!!
Allerdings läuft der MEGA32 nur mit dem externen Takt vom 8535, wenn ich 
die Fuses CKSEL3 bis CKSEL0 lösche.
Mit dem internen Takt ist er zu langsam, aber läuft.

von Jochen S. (jochen_s)


Lesenswert?

Klar das verzeihe ich jedem, war halt Q&D (quick and dirty). Hatte noch 
was dringendes zu erledigen, wollte denoch meine Hilfe anbieten, scheint 
sich aber soeben wohl schon geklärt zu haben.

Gruss Jochen S.

www.RS485-Hausbus.de.vu

PS: Geht jetzt zwar Offtopic, aber weiss jemand wie man als angemeldeter 
User so eine Art Signatur für seine Foreneinträge erstellen kann. Finde 
in den Usereinstellungen nichts in der Richtung.

von Sonic (Gast)


Lesenswert?

Hast vielleicht den Teiler /8 noch aktiv? Hat der m32 den? Dann würde er 
wohl mit 1MHz laufen.

von Karl H. (kbuchegg)


Lesenswert?

> Allerdings läuft der MEGA32 nur mit dem externen Takt vom 8535,
> wenn ich die Fuses CKSEL3 bis CKSEL0 lösche.

Beziehst du dich mit 'löschen' jetzt auf das Datenblatt
oder auf PonyProg. Im PonyProg ist das alles genau umgedreht.
Wenn im Datenblatt eine 0 steht, dann muss dafür im Pony
ein Häkchen gesetzt werden.

CKSEL3 - CKSEL0  alle Häkchen weg
CKOPT ein Häkchen hin
SUT1 - ein Häkchen
SUT0 - kein Häkchen

(CKSEL0, SUT1, SUT0 regeln die Einschwingzeit bevor der µC loslegt.
Mit der Einstellung oben sollte das eigentlich die längste
mögliche Einschingzeit sein)

Quarz dran. Jeweils 22 pF nach Masse


      22 pF
         ||
    +----||------+-----------> XTAL 1
    |    ||      |
    |            |
    |         ******* Quarz
    |         *******
    |            |
    |    ||      |
    +----||------+-----------> XTAL 2
    |    ||
    |   22 pF
    |
  --+----- GND

Sollte eigentlich ohne Probleme gehen.

von Karl H. (kbuchegg)


Lesenswert?

> Hat der m32 den?

Die heist doch normalerweise CLKDIV, oder nicht?

CLKDIV gibts nicht.
Die Frequenz vom internen Oszi wird ebenfalls mit
CLKSELx eingestellt.

von Sascha (Gast)


Lesenswert?

Alle Häkchen gesetzt, wie angegeben... Aber irgendwie kann Ponyprog dann 
nicht mehr auf den Controller zugreifen. (unknown Device) - Es sei denn, 
ich takte wieder mit dem 8535...
Ich schau mal, ob ich den Fehler finde, falls nicht, weiß ich ja, wo ich 
Hilfe bekomme. ;)

Vielen Dank!!!

von Sonic (Gast)


Lesenswert?

>Die heist doch normalerweise CLKDIV, oder nicht?

Jo, heißt CKDIV8 (Im Progger vom AVR-Studio) und ist beim Tiny2313.

von Sascha (Gast)


Lesenswert?

Hab´s jetzt... Habe das Quartz auf meiner Übungs-Platine zerbraten. Werd 
mal ein anderes einlöten und mich dann an den funktionierenden, dank 
Eurer Hilfe wiederbelebten 32ern erfreuen. ;)

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.