PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC-Pins an Atmega32



Sebasti
10.05.2009, 18:15
Hallo,

ich habe ein Problem mit den ADC-Pins am Atmega-32.
Und wazr kann ich diese Pins weder als Digitalen eingang noch als Ausgang definieren. Ich habe eine kleine Led-Schaltung bebaut, womit ich aller Ports durchtesten kann (die auch funktioniert).

Mein Bascom-Code sieht so asu:





$regfile = "m32def.dat"


Config Pind.1 = Output
Led Alias Portd.1


Dim Warten As Word
Led = 1
Warten = 30



Ddra = &B11111111

Config Porta.0 = Output
Do

Porta = 0
Porta. = 1
Led = 0
Waitms Warten
Led = 1
Porta.0 = 0
Porta.1 = 1
Waitms Warten
Porta.1 = 0
Porta.2 = 1
Waitms Warten
Porta.2 = 0
Porta.3 = 1
Waitms Warten
Porta.3 = 0
Porta.4 = 1
Waitms Warten
Porta.4 = 0
Porta.5 = 1
Waitms Warten
Porta.5 = 0
Porta.6 = 1
Waitms Warten
Porta.6 = 0
Porta.7 = 1
Waitms Warten
Porta.7 = 0


Loop

Wenn ich die Pins jetzt auf z.b. D andern würde blinken die Leds wie gewünscht. Das Selbe problem habe ich übrigens auch mit den I²C-Ports und ein paar anderen.

Danke für die Hilfe.
Gruß Sebasti

ikarus_177
10.05.2009, 20:48
Hi,

wenn du einen Pin/Port als Ausgang verwenden willst, musst du das so angehen:
Config PORTD.1 = Output

Soll er als Eingang verwendet werden, musst du mit
Config PIND.1 = Input initialisieren!

Viele Grüße

Sebasti
10.05.2009, 21:12
Hallo ikarus_177,

danke für die Antwort.
Das hatte ich aber schon ausprobiert, es hat aber nicht geholfen.
Allerdings waren das nicht die ADC-Ports sondern irgendwelche anderen.
Ich werde es morgen mal am ADC auprobieren.

Gruß Jonas

ikarus_177
10.05.2009, 21:16
Wenn es diverse Pins am Port C waren: JTAG deaktiviert?
Die Pins der HW - UART lassen sich auch nicht "üblich" ansprechen, wenn die serielle Schnittstelle über
$baud = XX aktiviert ist.

Viele Grüße

stefan_Z
10.05.2009, 21:16
Beliebter Fehler beim M32: JTAG ist im Lieferzustand aktiv und muss per Fuse deaktiviert werden, damit der Port C funktioniert!

Sebasti
10.05.2009, 21:19
Halo,

daran wird es wahrscheinlich liegen, ich habe an den Fusbytes nämlich noch garnichts gemacht.

Aber die Frage mit den I²C-Ports hat sich damit nch nicht gelöst.
Wie sieht es denn beim MEGA 2560 und MEGA8 aus? habt ihr da erfahrung.

Aber danke für die schnelle Hilfe, wenn das wahr (wovon ich ausgehe) dann habt ihr mir sehr geholfen.

Gruß Sebasti

TomEdl
10.05.2009, 21:43
Halo,

daran wird es wahrscheinlich liegen, ich habe an den Fusbytes nämlich noch garnichts gemacht.

Aber die Frage mit den I²C-Ports hat sich damit nch nicht gelöst.
Wie sieht es denn beim MEGA 2560 und MEGA8 aus? habt ihr da erfahrung.

Aber danke für die schnelle Hilfe, wenn das wahr (wovon ich ausgehe) dann habt ihr mir sehr geholfen.

Das JTAG-Fuse sollte generell abgeschaltet wird, wenn JTAG nicht verwendet wird.

Gruß
Thomas

Sebasti
11.05.2009, 20:25
Hallo,

es lag nicht daran.
Die JTAG-Schnitstelle ist deaktiviert.
Woran könnte es noch liegen?

Gruß Jonas

ikarus_177
11.05.2009, 20:39
Hi,

alle Versorgungsleitungen (AVCC, VCC, GND, AGND usw.) sind angeschlossen?

In deinem Code ist mir noch was aufgefallen, und zwar jene Zeile:

Waitms Warten

Ich glaube mal gelesen zu haben, dass hier ein konstanter Wert eingesetzt gehört, also keine Variable. Ist wahrscheinlich nicht die Ursache des Problems aber trotzdem nicht "richtig", zumindest laut meinem Stand der Technik.

Viele Grüße

Sebasti
11.05.2009, 20:42
Ich denke mal schon, da die Schaltung und das Programm an den Anderen Ports funktioniert.

Das stimmt. Aber nur bei dem Befehl Waitus.

Gruß Jonas

ikarus_177
11.05.2009, 20:46
Also tritt dieses Problem nur beim PortA auf?

Versuch mal folgenden Code, der bei mir funktioniert:


$regfile = "m32def.dat" 'verwendeter Chip
$crystal = 16000000 'Taktfrequenz
$hwstack = 512 'HardwareStack
$swstack = 512 'SoftwareStack
$framesize = 512

Config Porta = output

porta = 255

end

Das sollte eigentlich alle Pins auf log. 1 setzen.

Viele Grüße


EDIT: Mir ist gerade aufgefallen, dass ich den Stack + Frame wohl etwas zu happig für dieses Programm bemessen habe. Ich hab die Initialisierung aus einem umfangreichen Code herauskopiert, für dieses Beispiel sollten 32Bytes für den Stack + Frame eigentlich reichen.

Sebasti
11.05.2009, 20:55
Hallo ikarus_177,

es klappt leider nicht.
Auf einem anderem Port klappt das Programm aber.
Dann denke ich mak das das ein Hardwaremäßiger Fehler ist.
Aber ich habe keine AHnung, woran es liegen könnte. Wenn die ADC-Ports einfach nur Ausgänge sind dann brauchen die doch auch nicht mehr beschaltung als die anderen?

Aber danke für die Hilfe.
Gruß Sebasti

ikarus_177
11.05.2009, 20:59
Von der Beschaltung her müssten die sich genau so zufrieden geben, wie die anderen 3 Ports auch...

Hast du den Mega nach Grundschaltung verdrahtet? Sprich VCC + AVCC auf +5V, beide Massen gegen GND und AREF über einen 100nF KerKo gegen Masse.

Sonst wüsste ich leider auch nicht weiter.

Viele Grüße

Sebasti
11.05.2009, 21:00
Ich habe jetzt mal ein Bild von den FuseBytes gemacht. Falls ich irgendwas falsch gemacht habe.

http://jonas.redio.de/Fuse.jpg
JTAG ist enzichen aber wieder disabled.
Gruß Sebasti

ikarus_177
11.05.2009, 21:04
Da steht aber "JTAG enabled (portc.2-portc.5 not usable)" ;-)

Und am PortC funktioniert die "Ausgabe"? Deaktiviere mal das JTAG wenn dus nicht unbedingt brauchst, schaden kanns ja nicht...

Viele Grüße

EDIT: zu spät ;-)

Sebasti
11.05.2009, 21:07
[highlight=red:b3955af485]Da steht aber "JTAG enabled (portc.2-portc.5 not usable)"[/highlight:b3955af485]

Unterm Bild steht das es inzwichen anders ist.

Hier ein Link zu meiner Schaltung:

http://jonas.redio.de/ATMEGA.jpg

Gruß Sebasti

TomEdl
11.05.2009, 22:16
Schalte beim Fusebit für den Oszillator mal auf +64ms warten statt auf 0ms.

Gruß
Thomas

Sebasti
12.05.2009, 13:05
Hallo Thomas,

ich konnte leider nicht rausfinden, welches Fuse ich dafür verwenden muss.
Ich habe nichts gefunden wo was von +64ms steht.

Wie heisst diese Fuse denn?

Danke für die Hilfe.
Gruß Jonas

TomEdl
12.05.2009, 14:49
Hallo Thomas,

ich konnte leider nicht rausfinden, welches Fuse ich dafür verwenden muss.
Ich habe nichts gefunden wo was von +64ms steht.

Wie heisst diese Fuse denn?

Danke für die Hilfe.
Gruß Jonas

Ich habs in einem Screenshot eingezeichnet.

Gruß
Thomas
:)

TomEdl
12.05.2009, 14:50
Hallo Thomas,

ich konnte leider nicht rausfinden, welches Fuse ich dafür verwenden muss.
Ich habe nichts gefunden wo was von +64ms steht.

Wie heisst diese Fuse denn?

Danke für die Hilfe.
Gruß Jonas

Ich habs in einem Screenshot eingezeichnet.

Gruß
Thomas
:)

Sebasti
12.05.2009, 14:54
Ich sehe aber nichts.
Diesen einen Screenshot müsste ich dann ersmtal sehen.
Gruß Sebasti

TomEdl
12.05.2009, 14:56
Ich sehe aber nichts.
Diesen einen Screenshot müsste ich dann ersmtal sehen.
Gruß Sebasti
Ist im vorigen Beitrag angehängt.

Gruß
Thomas

Sebasti
17.05.2009, 19:09
Hallo,

sorry das ich mich jetzt erst melde.
Hatte was stress. Auf jedenfall klappt es aber immernoch nicht. Hat vielleicht eine eine Erklärung?

Danke für die Hilfen.
Gruß Sebasti