Erste Anfänge mit C und AVR

Genau das habe ich vor. Ich sitz grad inner Schule neben meinen Lehrer der grad Unterrichtet. xD Meld mich nachher mal wieder :p
Er meinte ich müsste das mit einer while()-oder Todo-Schleife machen, da es ja kein Festzustand ist.

Hat jemand noch einen guten Link oder Erklärung zu den Fuse-Bits?
 
Hi Kani,
Genau das habe ich vor. Ich sitz grad inner Schule neben meinen Lehrer der grad Unterrichtet. xD Meld mich nachher mal wieder :p
Er meinte ich müsste das mit einer while()-oder Todo-Schleife machen, da es ja kein Festzustand ist.
Wenn man bei einem Microcontroller auf eine Flanke bei einem Encoder
wartet dann tut der Microcontroller nix anderes mehr als den Encoder
abzufragen. Denk daran.

Entweder du läßt das dafür über Interrupts laufen oder du läßt es in deiner
Hauptschleife mitlaufen. Auf jeden Fall muß die Routine für den Encoder
recht oft aufgerufen werden da du sonst schnellere Drehungen des Encoders
nicht mehr sauber ausgewertet bekommst. Das Teil ist schon etwas tricky :D

Hat jemand noch einen guten Link oder Erklärung zu den Fuse-Bits?
Sieh mal hier nach. Das ist sogar in deutsch ;)
http://www.mikrocontroller.net/articles/AVR_Fuses

Gruß
Dino
 
So wie es jetzt ist, ist es in der Hauptschleife. Die geht er doch immer durch.
In wieviel ms? Naja, aufjedenfall ja derbe schnell.
Dann passt das doch? Ich schreib dann noch:

if am PINC 4 high wird

mach PA1 an
_delay_ms(10)
mach PA1 aus

if kein high signal

mach PA1 aus

So würde das doch gehen oder nicht? Der geht das ja immer ganz schnell durch
 
kleine Zusammenfassung

Hi Kani,

ich fasse nochmal zusammen ...

Du möchtest EINEN Incrementalgeber anschließen.
Ausgang A des Gebers auf PC4 und Ausgang B auf PC5
Wenn auf PC4 eine positive Flanke erkannt wird, dann
soll bei High auf PC5 ein 10ms Puls auf PA1 generiert werden
und bei Low auf PC5 soll der 10ms Puls auf PA2 generiert werden.

Es ist also die programmtechnische Umsetzung von einer kleinen
Digitalschaltung die je nach Drehrichtung des Incrementalgebers
Pulse auf der Taktleitung für Hochzählen oder auf der Taktleitung
für Runterzählen generiert. Hab ich das richtig verstanden ?

Für ne Lösung hab ich heute aber keine Lust mehr :D
Ich muß morgen wieder früh raus :(
Ist aber eigentlich relativ einfach umzusetzen. Auflösung
kommt demnächst. :)

Gruß
Dino
 
Ja, soeine Art. Ein Drehrichtungsauswerter hab ich es getauft.

Kani schrieb:
Wenn PC4 den Zustand von "Low" auf "High" wechselt und PC5 vorhanden ("High") ist, soll PA1 10ms "High" schalten.

Wenn PC4 den Zustand von "Low" auf "High" wechselt und PC5 nicht vorhanden ist ("Low") ist, soll PA2 10ms "High" schalten.

So könnte man es glaube ich beschreiben, dass ist nicht für mich sondern meinen Stiefbruder.
Ich kann ihn ja morgen nochmal fragen.

So ein Incrementalgeber hat doch zwei Kontakte oder wieviel? GND und +. Also zum anschließen am µC.
Damit soll man dann z.B. durch drehen, Programme auswählen können.

Programm 1
3 nach Rechts
Programm 4
2 nach Links
Programm 2

So ähnlich meinte er das glaube ich.
 
Hi Kani,

hier erst mal ein Flußdiagramm für deine Lösung ...
Encoder-Puls.png
Umsetzen in C mußt du das aber selber. Du sollst dabei ja auch was lernen :D
Die ersten beiden Enscheidungen sind zur Erkennung der positiven Flanke.
Eine Entprellung ist da aber noch nicht mit eingebaut!

So ein Incrementalgeber hat doch zwei Kontakte oder wieviel? GND und +. Also zum anschließen am µC.
Jau ! 2 Kontakte die mit A und B bezeichnet werden. Das sind die beiden Phasen des
Drehgebers. So wie es bei Drehstrom 3 um 120Grad verschobene Phasen gibt, so gibt
es beim Drehgeber 2 um 90Grad verschobene. Die Signale werden eigentlich nur durch
2 Kontakte erzeugt (bei den billigen). Mehr ist da nicht drin.

Manche Drehgeber haben auch noch einen 3ten Kontakt, der schließt wenn man auf
den Drehknopf draufdrückt.

Damit soll man dann z.B. durch drehen, Programme auswählen können.

Programm 1
3 nach Rechts
Programm 4
2 nach Links
Programm 2

So ähnlich meinte er das glaube ich.
Nach deinem Schaltplan und so wie ich es verstanden habe muß das Umschaltzeugs
aber außerhalb des Controllers sein. Frag ihn lieber nochmal, was er da nun genau mit
anstellen will.

Ich hab mal alles mögliche über Drehgeber/Encoder aus dem Internet gezogen
(wegen meinem Mega32 Board mit Drehgeber) hab ich aber gerade nicht dabei.

Gruß
Dino
 
Ich hab mal mit ihm gesprochen, wir waren in Bremen. (Fängt Morgen Meisterschule (Elektrotechnik) an.

Also, eine Tastatur ist ja wie ein Koordinatenkreuz.
A = B5
B=G4

So, anstatt die Rechte Taste 100 mal zu drücken, soll man einfach drehen können.
Das zwei mal. Für Links<->Rechts und Hoch<->Runter.

Stimmt dein Diagramm dann so?

Ich hab mal bei mikrocontroller.net geschaut. Das ist genau das was ich haben möchte, außer das es halt mit einem statt zwei ist. Ich werde jetzt erstmal versuchen das Programm zu verstehen.
Könnte vllt jemand den Code kommtentieren? Wäre nett.
Code:
#pragma cd pl(9999)
#include<reg51.h>

sbit GRAY_A	= P1^1;
sbit GRAY_B	= P1^2;


static char graycount;


char getgray( void )
{
  char val;
  EA = 0;
  val = graycount;
  graycount = 0;
  EA = 1;
  return val;
}


void t0_interrupt( void ) interrupt INT_T0
{
  char code graytab[] = { 0,1,-1,0, -1,0,0,1, 1,0,0,-1, 0,-1,1,0 };
  static unsigned char graycode = 0;

  if( GRAY_A )
    graycode |= 0x10;                   // new state to bit 3, 2
  if( GRAY_B )
    graycode |= 0x20;
  graycode >>= 2;          		// old state to bit 1, 0
  graycount += graytab[graycode];	// +/- 1 if state change
}					// 41 cycle = 12.3æs
 
Naja, wir lassen das erstmal mit den Incrementalgeber. Der kommt später.
(Boah, im moment switch ich so durch meine "Projekte", dass hört jetzt auf.)

Für mein LED-Projekt brauche ich:
-12 PWM-Kanäle
-14 für zwei 7-Segment-Anzeigen (Multiplexing? 7+1 Kanal)
-Zwei Taster für Programm hoch/runter bzw. einen Inkrementalgeber.
 
Hi Kani,

ich hab hier mal ein paar Bilder von nem 4-Kanal-PWM für dich ...

Das ist mein LED-Cluster mit den genannten 5mm-LEDs ...
LED-Cluster.jpg
Unter der Platine sind die Vorwiderstände angelötet und verbunden.

Die ursprüngliche PWM-Schaltung war analog ...
PWM-Analog-Oben.jpgPWM-Analog-Unten.jpg
Unter der Platine stecken die 4 BUZ11A MOSFETs.

und wurde dann auf digital umgestellt ...
PWM-Digital-Oben.jpgPWM-Digital-Unten.jpg
Die 4 kleinen Klopse vor dem Prozzi sind die IRLU2905 MOSFETs.
Auf der Unterseite sind die 4 SMD-Gate-Widerstände mit 470 Ohm zu sehen.

Ich hab nen AT90S2313 verwendet. Da fliegen noch ein paar bei mir rum.
Der ursprünglich verwendete AT90S1200 ging nicht, weil er den LPM-Befehl
nicht unterstützt. Den brauch ich aber für die Farbmisch-Tabelle im Flash.

Der Prozzi läuft mit 4MHz Keramik-Resonator. Der ist nicht so empfindlich
gegen Stöße. Bei einem Quarz kann es da mal zum Kristall-Bruch kommen.

Als kleine Anregung für deine Basteleien.

Gruß
Dino
 
Danke für die Vorschläge. Ich habe meine Platinen jetzt fertig und warte, bis der Rest von Reichelt.de kommt.
War bei uns im EP geschäfft. 9 Euro für 8 80 (bzw. 82) Ohm Widerstände und 4 113,3333333.... (bzw. 120) Ohm Widerstände. Für den Preis hätte ich auch gleich bei Reichelt bestellen können. -.-

Naja, jetzt isses erstmal fertig. Wenn der Rest kommt bastel ich noch die Steuerplatine mit dem ATMega und den Treibern. Dann weitersehen. Spätestens bei der Steuerplatine werden die ersten Fragen aufkommen. Ich hoffe du wirst mir weiterhin so freundlich Unterstützung leisten. =)
Super nett von dir. Wenn ich genug weiß, kann ich ja später auch Anfänger bei ihren Fragen hier im Forum helfen. Davon lebt ein Forum schließlich.

OT:
Soweit ich das richtig gelesen habe, sind die Mikrocontroller hier im Shop sogar noch günstiger als bei Reichelt!?
 
Hi Kani,
War bei uns im EP geschäfft. 9 Euro für 8 80 (bzw. 82) Ohm Widerstände und 4 113,3333333.... (bzw. 120) Ohm Widerstände. Für den Preis hätte ich auch gleich bei Reichelt bestellen können. -.-
Aus dem Grund hol ich mir immer 100er-Packs wenn ich nen Wert brauche der nicht in
meiner Kiste ist. Und die E12-Reiche reicht allemal. Was dein Stiefbruder da an krummen
Werten rumfliegen hat ... :rolleyes: Hat der Filterschaltungen gebaut ? Wo es auf jedes
Ohm ankommt ? Wie du an meinem Widerstandswerten siehst sind die meißten
Schaltungen da ziemlich tollerant was man da festlötet :D

Ich hoffe du wirst mir weiterhin so freundlich Unterstützung leisten. =)
Super nett von dir. Wenn ich genug weiß, kann ich ja später auch Anfänger bei ihren Fragen hier im Forum helfen. Davon lebt ein Forum schließlich.
Kein Problem. Seh ich auch so :) Ich gebe mein Wissen recht gerne weiter - so lange
der andere die Tips annimmt und nicht gegen alle Ratschläge vor sich hinstrickt und
sich danach beschwert weil es nicht läuft :mad:

Gruß
Dino
 
Kein Problem. Seh ich auch so :) Ich gebe mein Wissen recht gerne weiter - so lange
der andere die Tips annimmt und nicht gegen alle Ratschläge vor sich hinstrickt und
sich danach beschwert weil es nicht läuft :mad:

Gruß
Dino
Ich hoffe, ich bin nicht so ein Fall. Ich kann es im moment noch nicht nachvollziehen, da ich die Teile nicht da hab, aber das kommt morgen. :p

Die ISP kann man als normale Ports benutzen und gleichzeitig als Programmier Ports oder?
 
Hallo ,

Die ISP kann man als normale Ports benutzen und gleichzeitig als Programmier Ports oder?
Das geht recht gut (teilweise aber mit Einschränkungen). Da gibt es glaube ich auf der
Atmel-Homepage ne Info oder ApplicationNote oder sowas drüber. Oder such mal mit
Google danach.

Grobe Aussage davon ...
Den ISP-Sockel direkt an die Anschlüsse des Prozzis und die Hardware über Widerstände
an die Prozzi-Pins - Wenn die Pins als Eingang programmiert wurden und die Hardware
an die Pins Spannung anlegen würde. Bei Pins als Ausgang sollte an den Anschlüssen
Hardware sitzen die bei der Programmierung nix kaputt machen kann. Also keine
Motortreiber oder was ähnliches an die Anschlüsse legen. Die Widerstände waren
glaube ich 1k Ohm oder sowas.

Ich hab was gefunden ... Application Note AVR042 (AVR Hardware Design Considerations)
Figure 4-2
Oder sieh dir doch mal ein paar Schaltpläne an und sauge da die Teile raus die du benötigst ;)
Hier ist auch noch was ...
AVR-Freaks - Can I reuse ISP pins for other tasks?
AVRISP_User_Guide.pdf - Figure 3-5

Gruß
Dino
 
Schreib heute mal morgen mal wieder auser Schule.
Ja, ich schau es mir mal heute an wenn ich Zeit habe.

Bei embedded Projects im Shop (also Mikrocontroller.net) steht bei dem AVRISP mkII (den ich ja habe)
Zitat:
"Alle 8-Bit AVR-Mikrocontroller, die ISP-fähig sind, können damit programmiert werden. Er verfügt über einen USB-Anschluß und ermöglicht eine Programmierung direkt aus dem AVR-Studio."

8-bit? Was heißt das, einen ATMega32 kann ich also nicht flashen oder wie? Oder sind die 32 nur die mögliche Mh-Zahl?
 
Hi Kani,

8-bit? Was heißt das, einen ATMega32 kann ich also nicht flashen oder wie? Oder sind die 32 nur die mögliche Mh-Zahl?
ATmega8 hat 8kByte Flash
ATmega32 hat 32kByte Flash
ATmega128 hat 128kByte Flash :D
Merkst Du was ? :cool:
Sieh dir mal die Database hier auf AVR-Praxis an.
Alles was da unter "AVR ATMEGA" und "AVR TINY" steht
kannst Du programmieren.
Oder sieh dir bei Atmel.com die Typen unter
"Microcontrollers -> AVR 8Bit-RISC" an. Die sollten alle gehen ;)
Die MHz stehen weiter hinten. z.B. ...
ATmega8-16 => 8kByte Flash - max. 16MHz
ATmega16L-8 => 16kByte Flash , L=LowPower , 8 = 8MHz
So erkennt man das.

Gruß
Dino
 
*Kling* Habs gemerkt. Okay.
Gibt es auch Mikrocontroller, auf die man über W-Lan zugreifen kann? Ich habe bei mir überall im Haus ein W-Lan Netz.
Auf http://thomaspfeifer.net/ ->AVR-Projekte -> Embedded AVR Webserver.
Da steuert er seine Lampe über das WWW bzw. über sein W-Lan Netz. Kabel fürs Netzwerk liegen bei mir nur auf meinem Dachboden. Deßwegen wäre W-Lan nicht schlecht.
 
Hi Kani,

Gibt es auch Mikrocontroller, auf die man über W-Lan zugreifen kann? Ich habe bei mir überall im Haus ein W-Lan Netz.
Auf http://thomaspfeifer.net/ ->AVR-Projekte -> Embedded AVR Webserver.
Was nimmst Du da für Stoff :confused: kann ich da auch was von haben ? :rolleyes:
Fang erst mal an, ne RS232 zum PC ans funktionieren zu bringen. Nen IP-Stack
und WPA-Verschlüsselung kannst Du später immer noch programmieren :D

Wenn Du mit Wireshark Netzwerkverkehr analysieren kannst, dich mit ICMP, TCP, UDP, Windowsize, Retransmitts, ...
auskennst, dann können wir nochmal über LAN oder WLAN sprechen :viking:

Gruß
Dino
 
Hab halt nen ausgeprägten Sinn für Fantasie xD
Ich hoffe heute kommen die Sachen von Reichelt
 
Die Sachen wurden laut Reichelt vor 30min verschickt.

Dann kann ich mir ja langsam gedanken über das Programm machen.
Also, ich nehme am besten eine externe Stromversorgung. Hab nämlich noch 5-10 12V Steckernetzteile rummfliegen. Über die Steuerung bin ich mir nicht einig. Ein Incrementalgeber pro Ebene ->Nee, hab nur 3 7-Segment-Anzeigen statt 4.
Eine Anzeige für die Ebene (1-4) und einen bzw. zwei für das Programm.
Würde soetwas gehen?

Die Anzeige springt also immer auf das laufende Programm der angewählten Eben.
Oder meint ihr, dass geht auch noch leichter/komfortabler.
Eigentlich würde es auch reichen, immer für komplett alle Ebenen ein Programm zu schreiben. Oder wie seht ihr (bzw. du Dino) das? xD

EDIT: Langsam bin ich schon am überlegen, ob es nicht besser ist, die Ebenen zusammenzuführen. Also alle Roten, alle Blauen und alle Grünen auf jeweils einen Kanal. Dann häte ich mehr Pins für sonstige Spielereien frei.
 
Hallo Dirk.

Danke das du mir hilfst.

Also hier mal das Eagle File mit dem Schaltplan.
Erstellt mit 5.4.0.
So sollte es ungefähr passen. Ich habe andere 7-Segment-Anzeigen, aber es geht ja um das Prinzip.

Programm:
Es gibt ein Up und ein Down Taster für die Programmwahl. (PB 0-4)
Die 7-Segment-Anzeigen sind an Port C mit der Kathode gemultiplexed und die Anode geht auf PA 3-4, natürlich mit einem PNP-Transisor.
Die LED-Streifen Rot, Grün und Blau haben einen gemeinsamen + und sind mit den Kathoden mittels NPN-Transistor an PA 5-7.
Ich hoffe das reicht erstmal. Wenn irgendwas fehlt, sagt bescheid.
Ein Blick ins Eagle-File (Kostenlose Verion auf www.cadsoft.com) lohnt sich.
 

Anhänge

  • Vitrinenschaltung.zip
    114,4 KB · Aufrufe: 4

Ü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)