PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC Ports



ratze
08.01.2007, 15:22
hi leute.wir beschäftigen uns demnächst in der Schule mit dem PIC 16F84A.Dazu sollen wir auch ein kleines Projekt machen.
Ich hab schon mal ein bissien reingeschaut und hatte vor jetzt nach den ersten lauflichtern,Blinklichtern und Zählern zur ersten Übung einen Würfel (bzw. ein kleines Spiel) zu machen.
Der Würfel sollte aus 7 LED's bestehen.
Dazu einige Fragen:
Braucht jede LED einen eigene Leitung an Port B,oder kann man diese auch zusammenschalten?Wenn ja wie?

Und zum Quellcode:
Kann man Zufallszahlen mit Assembler programmieren?

Danke jetzt schon für eure Hilfe.

BMS
08.01.2007, 16:32
Hi

Am einfachsten wäre es natürlich, wenn du je led an einen pin hängst.
wenn du *unbedingt* pins sparen willst, kannst du sie z.B. als matrix schalten ( www.sprut.de ).
Andere Möglichkeiten (mit ICs):
- Multiplexer CMOS 4051 (braucht im endeffekt nur noch 4 pins),
- I2C-Erweiterungsbaustein (braucht nur noch 2 pins)
- D-Latch o.ä.
>> kurz gesagt gibt es tausende möglichkeiten.
Allerdings ist das wahrscheinlich nicht notwendig, is nur unnützer aufwand (+programmieraufwand).
bleib lieber dabei:
1led=1pin
[der pic 16f84 hat ja 13 i/o s!
minus 7 leds= 6 freie pins
-> noch 1 taster -> 5freie pins ?? warum also pins sparen???]

Zum Quellcode:
Richtige "Zufallszahlen" kann der PIC nicht erzeugen. Tipp: PIC ganz schnell (einige kHZ oder Mhz) von 1 bis 6 hochzählen lassen, wenn der Taster gedrückt wird. Wird der Taster losgelassen, wird der aktuelle Zählerstand an die LEDs ausgegeben. Für den User erscheint es, als ob es wirklich Zufall wäre.

Viel Erfolg
Mfg
BMS

theborg
08.01.2007, 16:54
jo oder man nimt nen pic der einen internen takt hat der ist unprizise genug dafür oder nen externen rc

ratze
08.01.2007, 17:00
danke schon mal!
das mit den Pins sparen war nur so ne idee,weil ich das ganze später evtl. noch ausbauen will und dazu auch noch den ein oder naderen pin benötige,aber ich denke ich mach es erst mal so dass ich jede LED an einen Pin hänge.
aber irgendwie wollte ich den würfel noch interessanter machen(z.Bsp. dass er langsam ausläuft oder ähnliches)da wäre ich für ideen und anregungen auch dankbar

@theborg:was meinst du mit "externer rc"?

r.moshage
08.01.2007, 17:34
Für Zufallszahlen schau dir mal diese Seite an:http://www.piclist.com/techref/microchip/rand8bit.htm?key=random&from=

theborg
09.01.2007, 04:14
danke schon mal!
@theborg:was meinst du mit "externer rc"?

des ist um das Taktsignal mit nen widerstand und einen Kondensator zu erzeugen schau mal auf http://www.sprut.de/electronic/pic/osc/index.htm damit soltest genug taktabweichung bekommen um ne art Zufallszahlen zu generieren den kanste auch zusätzlich zum quatz oder internen takt betreiben nur für die Zufallszahlen hat ja nach Bauteile um die 25% abweichung.

BMS
13.01.2007, 09:01
Hi

hab nochmal drüber nachgedacht
Du kannst doch Pins sparen, mit sehr wenig Aufwand.
Man kann nämlich die LEDs zusammenschalten, die gleichzeitig leuchten.
Die LED in der Mitte bleibt allein.
Die LED links unten kann man mit der rechts oberen zusammenschalten (In Reihe / Parallel, Widerstand anpassen)
Die LED links oben kann man mit der LED rechts unten zusammenschalten und die mittleren (rechts+links) auch.

A......C
B..D..B
C......A

Darstellungen:
Zahl --- folgende LEDs einschalten
1 --- D
2 --- C
3 --- D,C
4 --- A,C
5 --- A,C,D
6 --- A,B,C

Damit reduzierst du die benötigten Pins auf 4, ohne viel Aufwand. Die Programmierung wird dadurch auch einfacher.

MfG
BMS

ERS85
24.01.2007, 10:56
hast du schon eine lösung gefunden?
wenn ja wie?
ich habe als schulprojekt in etwa das gleiche bekommen!
ich soll einen elektronischen würfel abeuen aber anstatt mit einem 16F84A
soll ich das ganze mit einem 12F629 bauen!
das ziel des ganzen soll sein die ganze schaltung soll kelien als möglich aufzubauen!
es soll auch mit einer batterie betrieben werden können, dh. es sollte möglichst stromsparend sein!
eine weiterer toller effekt wäre wenn ich keine on/off schalter hätte sondern eine sleep funktion. leider weiß ich nicht wie ich die erstelle bzw wie diese funktioniert.
also nochmal zusammen gefasst!

-ich möchte einen Elektronischen würfel bauen
-mit einem PIC12F629
-platz sparen
-batterie betrieb
-sleep funktion

ich freue mich über jede hilfe!

ERS85

phaidros
24.01.2007, 21:37
Also erst mal würde ich die Idee von BMS übernehmen. Du kannst also mit 4 Pins die LEDs ansprechen. Diese Pins werden als Output konfiguriert. Die Pins können direkt LEDs treiben, du brauchst also keine Treiberbausteine, nur für jeden Pin einen entsprechend berechneten Vorwiderstand.

Die Sleep-Funktion ist recht einfach zu machen. Ein Pin (z.B. GP0) wird als Input konfiguriert. Außerdem wird der interne Pullup-Widerstand für diesen Pin aktiviert und die Interrupt-On-Change-Funktion wird eingeschaltet. Das bedeutet, der Pin ist ohne weitere Beschaltung auf High-Pegel. Nun schließt du an diesen Pin einen Schalter an, der ihn nach GND zieht, wenn er gedrückt wird. Wenn der PIC im Sleep-Modus war (durch den Befehl SLEEP ausgelöst), wacht er auf und macht im Programm weiter. Der Sleep-Modus ist extrem stromsparend, also selbst mit einer kleinen 3 Volt Batterie läuft das Ding ewig.

Um alles klein zu machen, ist wohl SMD am besten. Ich denke mit ein bißchen Geschick ist alles in einem Würfel von der Größe 5x5x5 cm unterzubringen.

Wenn weitere Unklarheiten sind, einfach fragen.

Gruß
Phaidros

BMS
25.01.2007, 12:39
Hi

Wenn du Low-Current-LEDs verwendest, dann hält die Batterie (theoretisch) 10x länger. Als Stromversorgung könnten vielleicht 1-2 Knopfzellen dienen, die sind ja auch recht winzig und leicht. Übrigens gibts dazu Halterungen bei reichelt.
Mit der SMD-Technik wirds ziemlich schwierig. Ich würde höchstens die Widerstände (Mini-Melfs lassen sich noch recht gut löten) in SMD-Technik verwenden. Den PIC in SMD einzulöten erfordert viel Fingerspitzengefühl. Lieber den PIC im DIL-Gehäuse verwenden und evtl. noch einen Sockel.

Braucht der Würfel überhaupt ein Gehäuse?

Mfg
BMS

phaidros
25.01.2007, 13:48
Low-Current-LEDs gibt es auch in SMD Bauform. Z.B bei Reichelt die Bestell-Nr. "LO T67K".

Gehäuse gehört dazu, finde ich. Ich würde in der nächsten Apotheke nach Deckgläsern für die Mikroskopie fragen. Die werden in sehr kleinen Plexiglas-Schachteln verkauft. Deckgläser wegschmeißen, Schachtel behalten. Sieht bestimmt gut aus mit der Schaltung drin (rundherum durchsichtig).

Oder die ganze Schaltung mit Gießharz in Würfelform vergießen.

Zum Ein/Ausschalten würde ich mir bei Conrad die Artikelnummer 700444 mal anschauen. Ein sehr kleiner Neigungsschalter. Ein leichtes Kippen des Würfels reicht dann, um ihn einzuschalten (resp. aus dem Schlaf aufzuwecken). Man braucht dann außen am Gehäuse keinen extra Schalter.

Gruß

Phaidros

P.S.: Das wäre doch mal ein toller Wettbewerb für das RN. Wer baut den kleinsten (in cm^3) elektronischen Würfel?

ERS85
25.01.2007, 21:47
ich habe mir da mal ne schaltung ausgedacht!
was haltet ihr davon!
ich habe anstatt eines schalters oder tasters diese variante mir ausgedacht!
und zwar durch berühren der zwei kontaktflächen soll der PIC aus seinem "schlaf" aufgeweckt werden und sofort eine zahl zwischen 1 und 6 anzeigen?
habe ich einen fehler eingebaut oder könnte ich noch etwas verbessern! bin mir nicht ganz sicher!

http://www.ers85.org/W%fcrfel_1.bmp

phaidros
25.01.2007, 22:23
Der Berührungsschalter schaltet nach Vdd. Wenn du ihn nach GND schalten lässt, kannst du R5 sparen und den internen Pull-Up des PIC benutzen.

Sieht sonst gut aus.

Gruß
Phaidros

Mobius
26.01.2007, 00:08
Zwei Fehler hab ich doch gefunden :)

Der GP3 ist mit dem MCLR gemuxt und der einzige Port-Pin des PICs, der NICHT als Ausgang geschalten werden kann. Also würden bei deiner Schaltung nie die beiden daran angeschlossenen LEDs leuchten. Die Lösung ist denkbar einfach, tausche GP3 und GP1 aus und schon geht's ;)

Und es ist keine gute Idee, LEDs, also Dioden parallel zu schalten. Wenn der eine, durch Toleranzen, etc. einen niedrigeren Innenwiderstand als der Andere hat, leuchtet dieser Stärker, beziehungsweise der Andere überhaupt nicht. Deshalb würd ich dir Raten, jedem LED einen eigenen Vorwiderstand zu verpassen.

Ansonsten hat phaidros recht, wenn du nach GND schaltest sparst du dir den Widerstand.
Und 2M sind für einen Pull-Up oder Down um Meilen zu hoch. Normalerweise nimmt man da 10k, 1k, wenn das Ding in einer sehr störempfindlichen Umgebung betrieben wird (neben einem Motor, etc).
Naja, schaltplantechnisch würde ich dir dann noch empfehlen die Symbole aus der liblary supply1/2 zu nutzen. Bei einer so kleinen Schaltung ist das nicht verheerend, wenn du es nicht machst, aber bei größeren wird es schwer bis fast unmöglich einen Fehler zu finden, wenn keine Versorgungspfeile im Schaltplan sind.

MfG
Mobius

ERS85
26.01.2007, 09:02
klasse ihr habt mir echt supper weiter geholfen!
ich werde diese fehler gleich beheben! und dann kann es los gehen die ganze sache zu programmiren und anschliesend aufzubauen! ich werd euch dann sagen ob es geklappt hat. =P~

PICture
26.01.2007, 10:16
Hallo ERS85!

Ich glaube, dass Dein pull-down mit 2 M sogar zu klein seien könnte, da der Berührungskontakt wahrscheinlich mit "normaler menschlichen Haut" (z.B. mit Finger) kurzgeschlossen wird. In diesem fall, muss man damit rechnen, dass es ein Widerstand von ein paar hundert kOhm ist. Bei R5=10 M sollte es schon sicher funktionieren.

MfG

BMS
26.01.2007, 18:15
Hi

Du kannst auch das Gehäuse als Berührungskontakt verwenden. Bau das Gehäuse aus Cu-Platinen und verschalte sie entsprechend. Wenn man den Würfel anfässt, erkennt er das und zeigt seine Zufallszahlen an. Damit schlägst du gleich 2 Fliegen mit 1 Klappe: Einmal das Gehäuse und zudem auch der Sensor. :cheesy:

@PICture: kann ich nur zustimmen, der Widerstand hängt auch davon ab, wie stark man auf den "Sensor" drückt.

@phaidros: Die internen Pull-ups im PIC sind ziemlich niederohmig. Bei einem Atmega32 (oh nein- ein Atmel im PIC-Forum^^) waren es berechnete 560 Ohm !!!!

Vielleicht kann man auch einen analogen Eingang verwenden (falls der 629er welche hat - kA) ist aber wahrscheinlich sehr störanfällig (hat Mobius auch schon geschrieben)

Die LEDs parallel zu schalten ist meiner Meinung nach kein Problem. Man muss schon viel Pech haben, um LEDs mit großen Toleranzen zu erwischen. Für diese Anwendung ist das ohne weiteres zulässig. Vor allem, weil er ja Teile sparen muss. :cheesy:

MfG
BMS

Mobius
26.01.2007, 18:43
oh nein- ein Atmel im PIC-Forum^^Bei einem Z80 hat mein keine solchen Probleme, der hat gar keine Ports :D (oh nein- ein Zilog im PIC-Forum :D) ^^ ;)

Leider nein, der 629er hat keine analogen Eingänge. Naja, eine Lösung wäre es, den comparator zu benutzen, hab aber erlich ka, wie das zu lösen wäre. Bisher hab ich solche berührungs-taster durch einen Schwingkreis, der sich dann verstimmt gelöst. Ansich kein großes Problem, man nimmt einen rückgekoppelten Inverter und schließt einen R-C-Tiefpass dran, der die Frequenz bestimmt an, wobei das C durch die angeschlossene Cu-Platte bestimmt wird. Das Signal leitest du auf einen Eingang vom µC und misst die Periodenlänge. Weicht sie zu sehr von einem bestimmten Sollwert ab, hast du eine Berührung festgestellt.
Ist aber glaub ich, für so eine Anwendung ein wenig oversized, vor allem, weil die Fläche relativ groß sein muss um eine eindeutlige Berührung festzustellen (oder man muss den Sollwert runterschrauben, woran aber wiederrum die Zuverlässigkeit leidet).

Das mit den LEDs hab ich schon selber erlebt, deshalb hab ich's auch geschrieben. Wobei das schon arg war, vor allem, weil ich zwei verschiedenfarbige LEDs parallel geschlossen habe ^_^'. Naja, jeder fängt Klein an, nur muss man aus seinen Fehlern lernen :).
MfG
Mobius

phaidros
26.01.2007, 23:52
@BMS: Nein, die internen Pullups bei den PICs sind nicht niederohmig. Berechnet ca. 20k Ohm.

Gruß
Phaidros

PICture
27.01.2007, 06:41
Hallo!

Man könnte die paralell geschalteten LED´s selektieren und solche finden, die gleich hell leuchten. Bei LED´s mit verschiedenen Farben ist es nicht möglich, da sie unterschiedlichene Durchflussspannungen haben.

MfG