Anfängerfehler

robb1

Neues Mitglied
01. Sep. 2010
3
0
0
Sprachen
Hallo, ich habe mir im Zuge meiner Projektarbeit das xmega Mikrocontrollermodul angeschafft, besonders reizvoll waren, neben der USB Schnittstelle, die 4 TWI Anschlüsse.

Ich hatte bis jetzt noch nicht so viel zu tun mit Mikrocontrollern und den xMega als Einsteigermodell zu wählen war sicherlich optimistisch, aber die 4 TWI Schnittstellen waren der ausschlaggebende Punkt.

Im moment scheitert es am einschalten der Pullup Widerstände, ich hab mich schon durch zig Foren durchgelesen aber es klappt einfach nicht, mein AVR Studio zeigt mir zwar in der Simulation an, das die Pullups gesetzt sind, aber wenn ich vom Pin auf Vcc messe, hab ich immer 0V.

Ich flash mit dem Programmer 1.3 und USB!
(zur Info: wenn ich die hier runtergeladenen "testcodes" z.b. blinkende LED draufflash, dann nimmt der Controller das an...also daran kanns nicht liegen)

kurz noch die wichtigsten ausszüge aus dem Code:

int main( void )
{



PORTE.DIR=0xFF; // Alle Pins des PORTE werden als Ausgang definiert

PORTE.OUT = 0xFF; /*Alle Bits werden auf High gesetzt*/

PORTE.PIN0CTRL = 0x38; // Für alle Pins von PORTE Wired-AND-PullUp










liegt es an mir oder am Controller/Programmer ?


Gruß Robert
 
Hallo Robert!

Willkommen im AVR-Praxis Forum! :ciao:


Ich habe zwar noch nicht mit dem XMega gearbeitet.... geschweige denn programmiere ich in C, aber.......

......mein AVR Studio zeigt mir zwar in der Simulation an, das die Pullups gesetzt sind, aber wenn ich vom Pin auf Vcc messe, hab ich immer 0V.
.....

Du aktivierst die PULLUP Widerstände des XMega, misst dann gegen Vcc und wunderst dich, dass dein Messgerät immer 0V anzeigt? :hmmmm:

Hast du dich verschrieben, oder hast du das wirklich so gemacht? ;)

Ich würde einfach mal gegen GND messen......... denn dein Controllerpin muss ja durch den Pullup schon (fast) Vcc haben.

Gruß,
Cassio
 
Hallo Robert,
PORTE.PIN0CTRL = 0x38; // Für alle Pins von PORTE Wired-AND-PullUp
jeder Portpin hat ein Control-Register. Im Codebeispiel stellst du nur den PIN0 vom PortE ein. Bei den AVRs aktivierst du ja die Pullups einfach durch konfiguration der Register DDRE und POTRE, hier gibts extra Register für jeden Portpin:

PORTE.PIN0CTRL = ...
PORTE.PIN1CTRL = ...
PORTE.PIN2CTRL = ...
PORTE.PIN3CTRL = ...
PORTE.PIN4CTRL = ...
usw...

Vorteil ist, man kann jeden Pin unterschiedlich konfigurieren, und das nicht nur mit Pullup an/aus.

Ich habe jetzt allerdings nicht nachgesehen, was du mit "0x38" einstellst, wird aber schon stimmen.

Wie Cassio schon erwähnt hat, musst du nach GND messen.

Viel Erfolg bei der Projektarbeit.

Grüße,
Dirk
 
Hi,

dann mal herzlich willkommen im Forum :flowers:

Im moment scheitert es am einschalten der Pullup Widerstände, ich hab mich schon durch zig Foren durchgelesen aber es klappt einfach nicht, mein AVR Studio zeigt mir zwar in der Simulation an, das die Pullups gesetzt sind, aber wenn ich vom Pin auf Vcc messe, hab ich immer 0V.
tja was soll ich noch mehr sagen und in die selbe Kerbe hauen.

PullUPs gehen nach oben (Vcc) sonst würden sie ja PullDOWNs heißen.
Und die gibt es auch. PullDown-Widerstände gehen nach GND.
Und wenn man eine Spannung messen möchte dann muß da auch eine
Differenz zwischen den beiden Potentialen bestehen wo man die Meßspitzen
dranhält.

OK. Genug gelästert :rolleyes: Aller Anfang ist schwer. Denn mal viel Glück
bei deinen weiteren Versuchen :victory:

Gruß
Dino
 
Hallo,

danke für die herzliche Begrüßung! Find ich echt Cool!

ich denke, dass das Eis zwischen uns gebrochen ist, ihr könnt euch ja denken das ich relativ Talentfrei in der Elektektrotechnik bin. :)

..Aber das mit den Pullups versteh ich trotzdem nicht, vielleicht kann ich meinen Denkfehler mit Hilfe der hochgeladenen Grafik lösen.

Ich denke:
-> Wenn ich zwischen VCC und dem Portpin messe, müssen doch die 5V am Widerstand abfallen ...oder ?!

Ich hab natürlich auch gegen Masse gemessen, aber da mess ich auch nix...kann es vielleicht sein, das diese internen Pullupwiderstände gar nicht messbar sind ? ( auf den Gedanken kommt warscheinlich nur ein Anfänger ; ) )

und nocht ein Frage:
-> ich will die 32 MHZ vom Oscillator messen .....wo kann ich jetzt sehen, auf welchen Pin das rausgeführt ist, ...ich bin der Meinung irgendwo bei Port Q (Block Diagramm im Datenblatt) ...aber wie erwartet kommt da nix raus wenn ichs messe :)


Danke und Gruß

Robert
 

Anhänge

  • bsp.png
    bsp.png
    4,1 KB · Aufrufe: 18
Hallo Robert,

bezüglich deines angehängten Bildes, ich hoffe nicht, dass du den Xmega mit 5V betreibst, dieser verträgt nämlich maximal 3,6V.

Hast du extern einen Pullup-Widerstand, dann fließt permanent ein Strom über die interne Schutzdiode des Portpins, da du gegen 5V "pullupst". Wenn extern Pullup, dann immer nur gegen VCC des Mikrocontrollers.

Wenn du nun einen Pullupwiderstand eines Portpins aktiviertst und der Portpin ist als Eingang konfiguriert und du belastest extern den Portpin nicht, dann wird der Portpin den Zustand high annehmen. An ihm misst du nun annähernd VCC (gegen Masse gemessen), es fließt auch kein Strom durch den Pullup-Widerstand, somit ist der Spannungsabfall 0V.

Nach Reset sind alle Portpins als Eingang konfiguriert und zwar hochohmig.
Du misst dann an einem Portpin 0V.

Wenn ein portpin als Eingang konfiguriert ist, kannst du zum Beispiel den internen Pullup-Widerstand folgendermaßen aktivieren:

Hier am Beispiel PORTA

PORTA.PINnCTRL |= 0b011<<3;

"n" steht hier für den einzelnen Pin. Also n=0..7.
Du musst also den Pullupwiderstand für jeden einzelnen Pin aktivieren. Bei den AVRs gibt es hierfür zwei Register (DDRA=DataDirectionRegisterA und PORTA=PortARegister, infos hierzu gibts im FAQ Bereich des Forums). Beim Xmega kannst du jeden einzelnen Pin flexibler konfigurieren, es ist nun sogar möglich einen Pulldown-Widerstand zu aktivieren.


Nun der Oszillator:
Der Quarzoszillator läuft ja mit 16MHz, da der Quarz 16MHz hat. Nach Reset läuft der Xmega erst einmal mit internem 2MHz RC-Oszillator. Per Software aktiviert man dann erst den Quarzoszillator, konfiguriert die PLL und schaltet dann die Quelle für den Systemtakt auf den Ausgang der PLL, so hat man dann zum Beispiel 32MHz Systemtakt. Im Supportbereich ist hierfür ein Beispielcode in C. Ist er Quarzoszillator aktiviert, kannst du die 16MHz am Quarz messen. Den Systemtakt kann man eventuell auch irgendwo ausgeben, habe ich aber noch nicht benötigt, da müsste man mal in das Datenblatt schauen.

Solltest du nichts an einer Seite am Quarz messen, hast du den Quarzoszillator per Software nicht aktiviert und der Xmega läuft bestimmt noch mit interenem 2MHz RC Oszillator. In dem Fall schau dir mal die Programmbeispiele an.

Ich hoffe, ich konnte dir etwas weiterhelfen.

Grüße,
Dirk
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)