PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Port gleichzeitig als Eingang / Ausgang verwenden?



squelver
12.09.2008, 16:50
Ich beschäftige mich nach ca. einem Jahr wieder intensiv mit der Controllerprogrammierung, bin schon ziehmlich raus aus der Materie.

Nun wollte ich PORTC verwenden, davon PC0 / PC1 als Ausgang und PC2 als Eingang (Taster), nur funzt das nicht.

Geht das generell nicht oder hab ich nen Denkfehler?

Ich habe folgendes gemacht:

DDRC = 0b00000011; /* als Ausgang */
PORTC = 0b00000100; /* Pullup */

fhs
12.09.2008, 16:57
Hi,

das ist ganz in Ordnung. Du hast dabei gleichzeitig PC0 und PC1 auf "L" gesetzt und müsstest dann z.B. schreiben <pre>PORTC|=(1<<PC1);</pre>, um PC1 auf "H" zu bringen. Nicht vergessen, dass Du "PINC" abfragen musst, um den Zustand der Eingangsleitung an PC2 zu testen: <pre>if (PINC&(1<<PC2)) { /*Taster nicht aktiv*/ } else { /*Taster aktiv*/ } </pre>!

Gruß

Fred

PS: Das Spinnentier in Deinem Avatar -- gibt's das wirklich oder ist das virtuell?

squelver
12.09.2008, 17:21
Hi,

das ist ganz in Ordnung. Du hast dabei gleichzeitig PC0 und PC1 auf "L" gesetzt und müsstest dann z.B. schreiben <pre>PORTC|=(1<<PC1);</pre>, um PC1 auf "H" zu bringen. Nicht vergessen, dass Du "PINC" abfragen musst, um den Zustand der Eingangsleitung an PC2 zu testen: <pre>if (PINC&(1<<PC2)) { /*Taster nicht aktiv*/ } else { /*Taster aktiv*/ } </pre>!

Gruß

Fred

PS: Das Spinnentier in Deinem Avatar -- gibt's das wirklich oder ist das virtuell?

Hi :)

Danke für die Aufklärung, ich habs so gemacht, auch die Tasterabfrage (hatte nur den einen Teil kopiert) leider sind die LED's an PC0 und PC1 nur am flackern, ich kann nicht normal schalten :-k

So sieht das gesamt aus:


#define F_CPU 3686400 // Taktferquenz des myAVR-Boards
#include <avr\io.h> // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------
main () // Hauptprogramm, startet bei Power ON und Reset
{
DDRC = 0b00000011; /* als Ausgang definiert */
PORTC = 0b00000100; /* Pullup */

do
{
// Schleifenanfang Mainloop

if(!(PINC&0b00000100))
{
PORTC = 0b00000011;
}
else
{
PORTC = 0b00000000;
}

}
while (true); // Schleifenende Mainloop
}

Eigentlich ne einfache Sache, aber ich steh grad aufm Schlauch 8-[

Ziel ist es, durch Tastendruck PC0 und PC1 zum leuchten zu bringen \:D/

Was mache ich falsch?


PS: wegen Profilfoto, das ist ne kleine Mauerspringspinne, nur ein paar mm groß, hab da n großes Fodo von ;)

Jaecko
12.09.2008, 17:21
Weil ich grad Port C les: kann evtl auch am aktiven JTAG liegen, falls die Pins da nicht so wollen wie geplant

squelver
12.09.2008, 17:23
Weil ich grad Port C les: kann evtl auch am aktiven JTAG liegen, falls die Pins da nicht so wollen wie geplant

Was müsste ich da machen, weil sie nicht wollen, wie ich will? O:)

PB als Ausgang zu verwenden und PC als Eingang, das funzt, aber beides an einem Port, da flackerts nur :-k

fhs
12.09.2008, 17:29
Hi,

JTAG oder nicht-beschalteter PIN AVcc können manchmal die Ursache sein, dass ein Port nicht richtig will. JTAG lässt sich über die FuseBits deaktivieren.

In Deinem Code gibt es aber noch ein anderes Problem: Du deaktivierst mit Deinen Zuweisungen "PORTC=" den Pullup an PC2.

Danke für die Info zur Springspinne! Ich habe mal eine unter meiner 30x-Stereo-Lupe betrachtet und war ganz fasziniert!

Gruß

Fred

squelver
12.09.2008, 17:35
Hi,

JTAG oder nicht-beschalteter PIN AVcc können manchmal die Ursache sein, dass ein Port nicht richtig will. JTAG lässt sich über die FuseBits deaktivieren.

In Deinem Code gibt es aber noch ein anderes Problem: Du deaktivierst mit Deinen Zuweisungen "PORTC=" den Pullup an PC2.

Danke für die Info zur Springspinne! Ich habe mal eine unter meiner 30x-Stereo-Lupe betrachtet und war ganz fasziniert!

Gruß

Fred

Hallo Danke :)

Du hattest Recht, jetzt funzt es, hat gleich Klick gemacht :mrgreen:
Vielen Dank \:D/

Das sieht dann so aus:


#define F_CPU 3686400 // Taktferquenz des myAVR-Boards
#include <avr\io.h> // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------
main () // Hauptprogramm, startet bei Power ON und Reset
{
DDRC = 0b00000011; /* als Ausgang definiert */
PORTC = 0b00000100; /* Pullup */

do
{
// Schleifenanfang Mainloop

if(!(PINC&0b00000100))
{
PORTC = 0b00000011;
}
else
{
PORTC = 0b00000100;
}

}
while (true); // Schleifenende Mainloop
}

Aber, wenn mir sowas passiert, dann muss ich höllisch aufpassen, da muss ne bessere Lösung her :-k

Die Spinnenart finde ich auch ganz faszinierend, die sind schlau, beobachten einen genau, gehst du näher ran dann gehen die n Stück zurück oder drehen sich mit dir :)
Ich habs Fodo mal auf unserem Balkongeländer gemacht ;)

Hier hab ich ne Baby-Mauerspringspinne geknipst:
http://www.fotocommunity.de/pc/pc/mypics/634419/display/6172690
http://www.fotocommunity.de/pc/pc/mypics/634419/display/6088770

fhs
12.09.2008, 17:41
Hi,

anstelle von "PORTC = 0b00000011;" würde ich noch "PORTC = 0b00000111;" schreiben, dann stimmt's!

Hast Du so ein Super-Makro-Objektiv oder wie sind die tollen Fotos entstanden?

Gruß

Fred

squelver
12.09.2008, 17:51
Hi,

anstelle von "PORTC = 0b00000011;" würde ich noch "PORTC = 0b00000111;" schreiben, dann stimmt's!

Hast Du so ein Super-Makro-Objektiv oder wie ist das Foto entstanden?

Gruß

Fred

Habs gleich mal geändert, funzt auch \:D/

Ich hab mir von ebay mal ne gebraucht Kodak Easyshare DX6340 gekauft, auf das Objektiv passt ne handelsübliche "schwarze" Filmdose. Aus verschiedenen Flachbettscanner habe ich verschiedenste Linsen / Objektive ausgebaut, diese in die Filmdose integriert. Wenn ich nun komplett ranzoome, dann ich super Makros machen, bei einigen Linsen leider nur mit nem sehr starken Brennpunkt und ich muss direkt an Objekt. Aus nem fetten Laserscanner vom Schrottplatz hab ich n großes Objektiv, das hat ne bessere Brennweite, damit hab ich auch das Fod von der Spinne gemacht ;)

Die schönsten Fodos mache ich mittlerweile mit meiner Kodak ZD710.

fhs
12.09.2008, 17:58
Danke für die Foto-Infos; deine Ergbnisse finde ich super!

squelver
12.09.2008, 18:00
Danke für die Foto-Infos; deine Ergbnisse finde ich super!

Danke ;)

Bin leider bisher nicht mehr groß zum Knipsen gekommen, ausser normale Fodos mit meiner neuen Cam.