Microcontroller

Alles rund um Computertechnik, LEDs, und und und....
Benutzeravatar
H0Egon
Forumane
Beiträge: 978
Registriert: Montag 16. Oktober 2006, 12:55
Wohnort: BW

Beitrag von H0Egon » Samstag 21. Juni 2008, 21:00

Daniel, da hilft das Datenblatt gerne weiter :wink: , warum aber manche Ports nicht alles können, aneder schon kann dir glaub ich niemand so richtig sagen, ist einfach so :wink:



MFG
David

Benutzeravatar
funcar
Forumane
Beiträge: 361
Registriert: Dienstag 27. Februar 2007, 07:04

Beitrag von funcar » Sonntag 22. Juni 2008, 08:34

Daniel Jud hat geschrieben:
Wieso sind manche Eingänge nur mit besonderen Funktionen zu belegen, andere können alles? Wo liegt welcher Port?
Wenn du mitteilst, um welchen Chip es sich handelt, kann ich dir bestimmt weiterhelfen.

Matze
Dem Regen entfliehen, in den Süden ziehen...

Gast

Beitrag von Gast » Freitag 27. Juni 2008, 11:11

So ich melde mich auch mal wieder zurück:

Das ist der Link zur Referenzkarte:

http://www.myavr.info/download/myavr_re ... 15_lpt.pdf

Ich werde allerdings sowieso noch einmal von vorne beginnen, da mir manch andere Sache auch noch nicht ganz klar ist.

Gruß
Daniel

claus
Forumane
Beiträge: 549
Registriert: Montag 5. Dezember 2005, 12:42
Wohnort: bei Nürnberg

Beitrag von claus » Samstag 28. Juni 2008, 10:25

Daniel Jud hat geschrieben:Hi,

klar, dass man mit dem Buch nicht so weit kommt. Ich meinte von meinen Verständnis bin ich dabei noch nicht sonderlich weit gekommen.
Wieso sind manche Eingänge nur mit besonderen Funktionen zu belegen, andere können alles? Wo liegt welcher Port? Solche Fragen schweben da im Raum. Ich habe da echt erst mal den Überblick verloren. Aber bald sind ja Ferien, da habe ich dann genug Zeit um das zu klären.

Gruß
Daniel
Zu jedem Kontroller gibt es ein Datenblatt in dem die Einzelnen Ports mit Ihren Eigenschaften beschrieben sind.
Die Unterschiede kommen vom Internen Aufbau der Kontroller. Es wäre zu aufwendig und auch normalerweise nicht erforderlich, das jeder Port alles kann.
Ausser den Anschlüsse für die Stromversorgung kann jeder Port normalerweise als Minimum als I/O Port betreiben werden teilweise mit oder Ohne schaltbare Pullup Wiederstände. Ausserdem hat der Kontroller noch hardwaremässig zusätze dabei z.B: Ser. Schnittstelle UART, Analog/Digitalwandler, Direkte Interrupteingänge, SPI Schnittstelle, Teilweise auch CAN oder USB Bus. Diese Internen hardwareerweiterungen können per Software alternativ auf dei Ports geschaltet werden.
Aber halt nciht auf alle sondern auf die Ports die bei der Kontroller Endwicklung dafür vorgesehen wurden.
Welche Ports welche Funktionen haben ist innerhalb einer Kontrollerfamilie meißtens gleich oder Ähnlich. Teilweise wurden aber auch Belegungen oder Funktionen von Früheren Generationen Übernommen.

Zur Programmierung würde ich nciht mit Assembler anfangen. Suche Dir eien Hochsprache aus, damit kommst Du erst mal schneller und einfacher ans Ziel.
Mit den hochsprachen kannst Du zwar die Kontroler Leistung nicht oder nur schwer voll ausreizen, die Programmierung ist aber wesentlich einfacher.
Ausserdem muß Du dich nicht mit irrgentwelchen Registern rumärgern.
Wenn Du z.B: in Assembler einen Timer verwenden willst muß Du alles selber machen, und wenn das Programm auf einem anderen Kontroller Typ laufen soll. fast alles neu schreiben.
Bei einer Hochsprache definierst Du nur eine Timernummer. Die Endwicklungssoftware (d.H. die Software, die das Programm dann in Assembler Übersetzt) Übersetzt das dann je nach Zielkontroller neu und sucht für die Kontroller die Jeweils richtigen Register automatisch. Man kann innerhalb eine Kontrollerfamilie den Zielkontroller nahezu belibig ändern. Wenn Du merks, daß Du z.B. mehr Ports brauchst dann kannst Du einen Grösseren Kontroller benutzen und das meißte Deiner Software Übernehemn der Automatische Übersetzer mscht die Arebti für dich. In Assembler muß Du vieles von hand anpassen.
Ausserdem ist bei den Hochsprachen Endwicklungsumgebeungen auch eine Fehlerkorrektur und Programmkontrolle dabei.

Wenn Du Hochsprache Programmieren kannst, kannst Du später immer noch mit Assembler befassen.

Ich habe mich für Bascom endschieden. und benutze da momentan die Freeware Version. ich komme halt noch aus der "Generation Basic" für C oder Pascal gibt es glaube ich auch Freie Endwicklungssoftware.

Der Programmierhardware ist es eigentlich Egal welche Software du benutzt. Wobei der Weg andersrum geht. Man stellt bei der Endwicklungssoftware ein welche Art Hardware man zur Übertragung in den Kontroller hat.

Bascom z.B. hat den Vorteil, daß es für viele Sachen schon eine Grundsoftware sozusagen als Betriebssystem mit bringt.
Man kann z.B. mit wenigen Befehlen einen Servo oder ein LCD steuern. Aus Zeitschleifen oder die Serielle Komunikation wird sehr gut unterstützt.

Ich habe mich früher (C64er Zeiten) mal mit Assembler beschäftigt und möchte mich damit erstmal nicht mehr rumärgern.
Für Standartanwendungen reicht die Leistung der Hochsprachen locker aus. Auch weil die AVR als RISC-Prozessor von haus aus schon relativ schnell sind.
Die Heutigen Mikrokontroller haben eine Rechenleistung, die weit über dem liegt was dei ersten PC´s hatten. Da kann man für Hobbyanwendungen Problemlos Rechenleistung mit Hochsprachen verschwenden.

Zumal Deine Anwendung ja sowieso sehr Dezentral mit vielen Kontroller ist, wo jeder nur wenige Funktionen hat.

Gast

Beitrag von Gast » Dienstag 1. Juli 2008, 11:30

HI,

ich hab jetzt mal eine Frage. Die nachfolgende Schaltung sollte eigentlich mit dem Tasterdruck eine LED zum Leuchten bringen. Jetzt passiert aber genau das Gegenteil. Sie leuchtet und bei Tasterdruck hört sie auf zu leuchten. Wo liegt denn jetzt mein Fehler?

;+----------------------------------------------------------------------
;| Title : myAVR Grundgerüst für ATmega8
;+----------------------------------------------------------------------
;| Funktion : LED PER TASTER AN
;| Schaltung :
;+----------------------------------------------------------------------
;| Prozessor : ATmega8
;| Takt : 3,6864 MHz
;| Sprache : Assembler
;| Datum : 01.07.08
;| Version : 1.0
;| Autor : DJ
;+----------------------------------------------------------------------
.include "AVR.H"
;------------------------------------------------------------------------
;Reset and Interrupt vector ;VNr. Beschreibung
rjmp main ;1 POWER ON RESET
reti ;2 Int0-Interrupt
reti ;3 Int1-Interrupt
reti ;4 TC2 Compare Match
reti ;5 TC2 Overflow
reti ;6 TC1 Capture
reti ;7 TC1 Compare Match A
reti ;8 TC1 Compare Match B
reti ;9 TC1 Overflow
reti ;10 TC0 Overflow
reti ;11 SPI, STC Serial Transfer Complete
reti ;12 UART Rx Complete
reti ;13 UART Data Register Empty
reti ;14 UART Tx Complete
reti ;15 ADC Conversion Complete
reti ;16 EEPROM Ready
reti ;17 Analog Comparator
reti ;18 TWI (I²C) Serial Interface
reti ;19 Store Program Memory Ready
;------------------------------------------------------------------------
;Start, Power ON, Reset
main:ldi r16, 0xFF
out DDRB,r16

ldi r16, 0x00
out DDRD, r16

ldi r16, 0xFF
out PORTD, r16

;Hier Init-Code eintragen.
;------------------------------------------------------------------------
mainloop: wdr


in r16, PIND

out PORTB, r16

rjmp mainloop
;------------------------------------------------------------------------

Gast

Beitrag von Gast » Dienstag 1. Juli 2008, 14:41

Hallo,

so jetzt melde ich mich auch mal wieder. Das Thema Mikrocotroller interessiert mich sher und ich möchte auch bald anfangen damit.
Undzwar bin ich auch schon lnage auf der Suche nach einer Häuserbeleuchtund, habe bis jetzt aber nirgends etwas passendes gefunden und würde es deshalb mal selber versuchen.
Ich möchte in jedes Haus ein Programm bauen, dass nach Zufall ca. 10-20 Led in unregelmäßigen Zeitabständen ein und auschaltet, so wie ein "Belebter Haus" Baustein. Nimmt man dafür Assembler, Basic oder C?
Muss man, um soetwas zu programmieren, Informatik lernen?
Was haltet ihr davon?
http://shop.embedded-projects.net/produ ... 2&info=p67

MfG NOB ER 20

claus
Forumane
Beiträge: 549
Registriert: Montag 5. Dezember 2005, 12:42
Wohnort: bei Nürnberg

Beitrag von claus » Dienstag 1. Juli 2008, 15:42

@Daniel:
Wie hast du den Taster und die LED angeschlossen.
Es kann sein, das die Invertierung durch die Anschlußart kommt.

Beim Taster:
Die Ports sind meißt mit Pullupwiederstnad der Taster Schaltet nach Masse.
Also ist der Port ohne Taster High der Taster Schaltet auf Low.

Open Collector Ausgänge mit Pullup können mehr Leistung nach Masse als von 5V Treiben. Eine LED von 5V nach OC Port brennt also wenn der Port Low ist.
Bei Push/Pull Ports kommt es drauf an wie die LED Angeschlossen ist. Eine LED nach Masse brennt bei High am Port eine LED von 5V brennt bei Low am Port.

Evtl. liegt da der Fehler.
Obs am Assembler Teil liegt weiß ich nicht. Das ist bei mir 20-25 Jahre her, das ich mich mit Assembler befasst habe. Da weis ich fast nix mehr.

@NOB ER
Mir erscheint das Set zu teuer. Der weiter oben genannte Bausatz von Pollin kann mehr. Und koster weniger. Ist aber ein Bausatz, passt vermutlich nicht zum dem genannten buch und ist für Ser nicht für UBS. Da müßte aber auch ein USB->Ser dazwischen gehen.
Gruß
Claus

H0 überwiegend Märklin Analog, einzelne Digital MM und mfx, Etwas Gleichstrom Analog.

Habe jetzt icq: 354286575

Tisch- und Teppichbahner.

Scout
Forumane
Beiträge: 244
Registriert: Montag 5. Juni 2006, 09:11
Wohnort: Borken

Beitrag von Scout » Dienstag 1. Juli 2008, 15:55

Hallo Daniel,
Daniel Jud hat geschrieben:ich hab jetzt mal eine Frage. Die nachfolgende Schaltung sollte eigentlich mit dem Tasterdruck eine LED zum Leuchten bringen. Jetzt passiert aber genau das Gegenteil. Sie leuchtet und bei Tasterdruck hört sie auf zu leuchten. Wo liegt denn jetzt mein Fehler?
Ohne die Schaltung zu sehen (wo die LED und Der Taster angeschlossen sind) kann ich nur Vermutungen anstellen:
Daniel Jud hat geschrieben:;Start, Power ON, Reset
main:ldi r16, 0xFF
out DDRB,r16

ldi r16, 0x00
out DDRD, r16

ldi r16, 0xFF
out PORTD, r16
Du setzt PortB als Ausgang und PortD als Eingang mit Pull-up-Widerstand. Ich vermute mal, dass der Taster gegen GND schaltet und die LED auch zwischen den Ausgang und GND ist?
Daniel Jud hat geschrieben: in r16, PIND

out PORTB, r16
Wenn Jetzt an Pin D Spannung anliegt soll Port B eingeschaltet werden.
Durch den Pull-up liegt aber immer Spannung an, daher leuchtet auch die LED immer.
Wenn du die Taste drückst wird die Spannung neutralisiert und es liegt keine Spannung mehr an, die LED leuchtet nicht mehr.

Eine Änderungsmöglichkeit wäre den Pull-up auszuschalten und gegen VCC zu schalten, oder die LED an VCC statt GND anzuschließen.

Benutzeravatar
H0Egon
Forumane
Beiträge: 978
Registriert: Montag 16. Oktober 2006, 12:55
Wohnort: BW

Beitrag von H0Egon » Dienstag 1. Juli 2008, 16:17

@ Daniel
Da kann ich dir leider nicht helfen, ich kann nur Basic, bzw. C

@Nob ER 20
Für sowas relativ einfaches reicht C bzw. Basic aus, möchtest du Allerdings ein großes Programm schreiben ist Assembler besser, da es viel weniger Flash (Speicher) braucht.




David

Gast

Beitrag von Gast » Dienstag 1. Juli 2008, 19:27

Hallo

ja, ersmtla möchte ich noch so etwas einfaches programmieren. Später dann vielleicht etwas größeres.
Muss man denn Informatik können?

Benutzeravatar
H0Egon
Forumane
Beiträge: 978
Registriert: Montag 16. Oktober 2006, 12:55
Wohnort: BW

Beitrag von H0Egon » Dienstag 1. Juli 2008, 19:49

Bitte was verstehst du unter "Informatik können"?
Sry, aber ich kann damit Nix anfangen




LG
David
Zuletzt geändert von H0Egon am Dienstag 1. Juli 2008, 20:19, insgesamt 1-mal geändert.

Benutzeravatar
funcar
Forumane
Beiträge: 361
Registriert: Dienstag 27. Februar 2007, 07:04

Beitrag von funcar » Dienstag 1. Juli 2008, 20:04

@NOB ER 20
Du musst keine Informatik können um eine Lichtsteuerung zu programmieren.
Wenn du komplexere Programme schreiben willst, ist es schon wichtig und notwendig.
Sonst gebe es ja dieses Studienfach nicht.

Wichtig für das Programmieren ist, dass du das, was das Programm machen soll,
im Kopf und schriftlich in einzelne Schritte und Einzelteile zerlegen kannst.
Logisches Denken ist also gefragt.
Zum Programmieren mußt du auch unbedingt wissen:
Was sind Bits, ein Byte, ein Word.
Dann, was sind Hexadezimale und Binäre Zahlen.

Das lernst du aber alles aus dem Startset.

@H0Egon
"Sry, aber ich dann damit Nix anfangen"
Wenn du beim Programmieren solche Schreibfehler machst, läuft dein Programm nie.
Ein Tippfehler und dein Programm tut nicht das was du willst.

Matze
Dem Regen entfliehen, in den Süden ziehen...

Benutzeravatar
H0Egon
Forumane
Beiträge: 978
Registriert: Montag 16. Oktober 2006, 12:55
Wohnort: BW

Beitrag von H0Egon » Dienstag 1. Juli 2008, 20:21

Kann mir mal bitte jemand erklären was man unter Informatik versteht?
Das Gebiet reicht schlieslich von Netwerktechnik bis eben zu Microcontrollern
:wink:

@Matze, bis jetzt sind alle meine Programme auf Anhieb gelaufen :twisted:




David

Benutzeravatar
Oysos
Forumane
Beiträge: 793
Registriert: Samstag 4. August 2007, 11:43
Wohnort: Kiel

Beitrag von Oysos » Samstag 5. Juli 2008, 11:53

Moin,
NOB ER 20 hat geschrieben:Ich möchte in jedes Haus ein Programm bauen, dass nach Zufall ca. 10-20 Led in unregelmäßigen Zeitabständen ein und auschaltet, so wie ein "Belebter Haus" Baustein. Nimmt man dafür Assembler, Basic oder C?
Um eine Zufallssteuerung zu programmieren, ist eine Hochsprache angesagt. Für Windows/Linux-Programmierung sind Funktionen wie random() o.ä. oft schon fertig vorprogrammiert und können verwendet werden. Für µCs siehts da schon anders aus. Es gibt aber Code für einfache Zufallsfunktionen in C im Netz.
NOB ER 20 hat geschrieben:Muss man denn Informatik können?
Es gibt viele Teilbereiche der Informatik wie Prädikaten- und Aussagenlogik, die man sich nicht zur Gemüte führen muss und ein bisschen Logik kann jeder von uns intuitiv.
Wichtiger sind Dinge wie Programmierkonzepte (prozedural, objektorientiert, ...) und Grundlagen der Datenspeicherung (Bits, Bytes usw.)

H0Egon hat geschrieben:@Matze, bis jetzt sind alle meine Programme auf Anhieb gelaufen
Das glaube ich dir einfach nicht. Ein Programm läuft nie sofort perfekt, es sei denn du programmierst Zweizeiler...

Oder schreib doch im Forum so sorgfältig wie beim Coden. Danke.

Gruß
Hannes

Benutzeravatar
H0Egon
Forumane
Beiträge: 978
Registriert: Montag 16. Oktober 2006, 12:55
Wohnort: BW

Beitrag von H0Egon » Samstag 5. Juli 2008, 13:39

@Oysos
Kannst du mir ruhig glauben, schließlich gibts ja den Syntaxcheck, und der hat bis jetzt immer die wenigen Fehler gefunden, und ich hab sie verbessert, bevor mein Programm nicht durch'n Sytaxcheck ist flasch Ich's garnicht :wink:



David

Benutzeravatar
funcar
Forumane
Beiträge: 361
Registriert: Dienstag 27. Februar 2007, 07:04

Beitrag von funcar » Sonntag 6. Juli 2008, 08:28

H0Egon hat geschrieben: ...nicht durch'n Sytaxcheck ist flasch Ich's garnicht :wink:
David
Kein Kommentar :wink:

Matze
Dem Regen entfliehen, in den Süden ziehen...

Gast

Beitrag von Gast » Montag 14. Juli 2008, 17:31

So ich melde mich mal wieder zurück.

Ich habe eine Teststrecke und ein LKW oder eher einen zu groß geratenen Bob für meine späteren Versuche gebaut; mit 4Akkus darin. Das sind also 4,8 Volt.

Kann ich den Mikrocontroller (Atmega8) daran anschließen oder brauche ich noch einen Schutzwiderstand.????? Die Versorgungsspannung darf im Bereich von 3,5 bis 5Volt sein, wenn ich mich nicht irre.

Und kann ich mit einem Transistor einen Motor ein und aus schalten?
Kann ich den Motor damit auch stufenlos regeln?
Ich habe 2 Fahrstufen angedacht, da die Autos bei mir auf der Anlage an einer Stelle ein bisschen mehr Power bräuchten.

Gruß
Daniel

Benutzeravatar
Oysos
Forumane
Beiträge: 793
Registriert: Samstag 4. August 2007, 11:43
Wohnort: Kiel

Beitrag von Oysos » Montag 14. Juli 2008, 20:32

Moin,

ven die Versorgungsspannung zwischen 3,5 und 5 V liegen darf, sind 4,8 V doch richtig.

Der Motor muss über einen Transistor geschaltet werden. Mit dem Mikrocontroller lässt sich zusätzlich eine PWM-Regelung realisieren, die verschiedene Geschwindigkeiten bei hohem Drehmioment erlaubt.

Gruß
Hannes

claus
Forumane
Beiträge: 549
Registriert: Montag 5. Dezember 2005, 12:42
Wohnort: bei Nürnberg

Beitrag von claus » Donnerstag 17. Juli 2008, 22:59

Die 4,8V sind nur die Nennspannung. Die effektive Spannung kann je nach Akkuladung auch Deutlich drunter oder drüber liegen.
Ich würde die Spannung für die Kontroller auf jeden fall begrenzen im einfachsten fall mit einer Z-Diode.
Oder Du sochst Die einen Kontroller, der auch bis 6V aushält.
Gruß
Claus

H0 überwiegend Märklin Analog, einzelne Digital MM und mfx, Etwas Gleichstrom Analog.

Habe jetzt icq: 354286575

Tisch- und Teppichbahner.

Benutzeravatar
funcar
Forumane
Beiträge: 361
Registriert: Dienstag 27. Februar 2007, 07:04

Beitrag von funcar » Samstag 19. Juli 2008, 04:39

Voll geladene Akkus liefern ca. 1,4 Volt pro Zelle.
Das ergibt bei 4 Zellen dann 5,6 Volt.
Das verträgt der ATMEGA8 gerade noch.
Fast leere Akkus liefern nur noch 0,9 Volt pro Zelle.
Da läuft der ATMEGA8 nicht mehr !
Du kannst also nie die gesamte Akkukapazität mit dem ATMEGA8 nutzen, da der dieser Chip nur von 4,5 - 5,5 Volt arbeitet.
Wenn du den ATMEGA8L nimmst, kannst du 3 oder 4 Akkus verwenden.

Du solltest aber beim Laden den ATMEGA8 vom Akku trennen, sonst gibt der Prozessor den Geist auf.

Matze
Dem Regen entfliehen, in den Süden ziehen...

Antworten