hallo leute...kleines prob bei einem anfänger :) also ich habe meinen atmega8 folgende belegung spendiert: LDI temp, 0x00 OUT DDRB, temp ;Eingänge LDI temp, 0xFF OUT DDRC, temp ;Ausgänge LDI temp, 0x00 OUT DDRD, temp ;Eingänge da ich die pullups nicht benutzen will sollte das alles gewesen sein richtig?? die frage bei port c: das ist nur ein 7 Bit Port..wird der trotzdem so als wären es acht initialsiert?? der pin 6 soll als normaler ausgang aktiviert werden, nicht als reset..richtig so?? oder fehlt da noch was?? was fehlt für den externen takt noch?? zum anderen noch die frage: wie startet man nen timer und vorallem wie stoppt man ihn und resetet ihn wieder?? danke für jede hilfe :) gruss Tim
Den Timer startet und stoppt man in dem man den Prescaler setzt, einstellen kann man ihn mit den Registern die im Datenblatt angegeben sind.
Uh, oh, bist Du Dir wirklich sicher, daß Du Deinen Chip nie wieder via ISP programmieren willst? Nur dann solltest Du die RSTDSBL-Fuse setzen, um ihn als Ausgang zu verwenden. Solange sie gelöscht ist, kannst Du in die Steuerregister für Port C, Bit 6 programmieren, was Du willst. Ansonsten klar, Du mußt den Port natürlich im Ganzen ansprechen, Bit 7 ist offiziell reserviert, d. h. es wird als 0 gelesen und sollte als 0 geschrieben werden. Vermutlich wird es aber einfach nur ignoriert, wenn Du was anderes reinschreibst. Alternativ könnte es auch sein, daß die CPU sich das merkt, was Du geschrieben hast und Du es wieder auslesen kannst, es eben nur auf keinen Ausgang führt.
also zum pin6 an portc: ich brauche halt noch einen weiteren ausgang. ich plane in der schaltung via isp neue updates einspielen zu können. die frage ist ob man das irgendwie bewerkstelligen kann... vielleicht könnte mir jemand mal die drei zeilen posten damit ich mir den chip nicht versaue :/ sonst würde ich alternativ an portd pin0 diesen ausgang initialisieren..dazu müsste ich aber das gesammte layout ändern was ziemlich arbeit wäre da der chip im mlf gehäuse ist und die platine smd bestückt ist. standartmässig sind die pullups also aus ja?? wie sieht das für internen/externen takt aus..hat da jemand mal nen beispielquellcode oder kann mir sagen wie das gemacht wird??? die geschichte mit dem timer hat sich erledigt danke
Also entweder PortC.6 ist I/O-Pin, dann gibt es keine ISP-Möglichkeit. Oder PortC.6 ist /Reset, dann geht ISP, aber eben kein I/O. Lösung kann sein: Bootloader verwenden, z.B. über RS232, beim ersten Initialisieren Bootloader flashen und Fuse brennen. Unangenehm wenn irgendwas schiefgegangen ist. Für die neuen mega48/88/168 ist der /Reset gleichzeitig der Debug-Pin. Ist für mich ein Grund mehr, diesen Pin nicht als I/O zu verwenden. Stefan
gliech noch ne frage..der isp brauch ja auch die miso mosi und sck ports..die brauch ich aber auch als eingänge..gibts da keine probs??
:/ ich steig da ehrlich nicht mehr durch.. bitte kann mal wer posten wie ich das jetzt richtig initialisiere wenn ich später mit nem isp neue updates einspielen will (also bitte mal den assembler code..das is als neuling etwas unverständlich) PB, Bit0 bis Bit4 eingänge ohne pullup, Bit5 brauch ich nicht, Bit6 und Bit7 als externen osc PC, Bit0 bis Bit5 ausgänge, bit6 der reset PD, Bit0 ausgang, Bit1 bis Bit7 eingänge ohne pullup danke für die mühen
HAllo Tim! Es ist total egal wie du die Eingänge programmierst. Wenn der Controller programmiert wird, wird er als erstes sowieso resettet, und da werden die Ports alle auf Eingang geschaltet. Was dir höchstens passieren kann ist, dass deine Schaltung nicht richtig arbeitet, solange du das Programmierkabel angesteckt hast. Also nach dem programmieren ev. das Kabel abstecken und gut ist.
RTFM.. Oder: Lies das Datenblatt, versuche das hier im Forum befindliche Tutorial zu verstehen, begnüge dich vorerst damit, eine LED zu schalten und dann blinken zu lassen, gehe einen Schritt nach dem anderen. Und route deine Platine erst, wenn du begriffen hast, was der Chip kann. Tip am Rande: Lies nicht nur die Überschriften, hier geht es nicht um Werbebotschaften sondern um Fakten, die verstanden werden sollten. Klaus
spassvogel..sorry..aber solche kommentare sind fehl am platz..und das ist nicht böse gemeint. das tutorial ist schön und gut..ich habe es durchgearbeitet und simuliert und es gebrannt...funktioniert auch alles..man versteht was dort gemacht wird. aber vielleicht erinnerst du dich an deine anfangszeiten...dann versucht man natürlich immer ein bisschen mehr..das klappte auch soweit, die ersten programme laufen auf meinem board das ich mir geätzt hab. jetzt habe ich ein neues vollbeschaltetes board geeagelt...und möchte darauf testen. jetzt bin ich an dem punkt wo ich den controller halt mal voll beschalten will...simulation ist das eine..aber es geht hier um ein feedback fürs brennen!!!! und bevor ich mir einen controller nach dem anderen versaue frage ich lieber leute die davon ahnung haben..schliesslich kostet das alles geld!! UND DAS STEHT NICHT IM TUTORIAL!! das ein anfänger nicht alles gleich von anfang an versteht sollte auch dir klar sein..er lernt ja erst noch!! und dafür gibt es diesen bereich hier glaub ich auch!! wenn jemand hier fragen zu elektrischen sachen hat die ich trivial finden hau ich ihm auch nicht gleich sowas an den kopf!! also vielleicht gibts ja leute die ein wenig mehr hilfe anbieten..danke an klaus
Du solltest aber schon zuerst ins Datenblatt sehen, bevor Du die Platine machst. Schließlich mußt du ja wissen, welchen Pins Sonderfunktionen haben (Reset, Quarz, SPI usw.). Und solange Du die Sonderfunktionen nicht verstanden hast, solltest Du die Pins besser reserviert lassen. D.h. wenn Du gleich zu Anfang alle Pins ausreizt, dann hast Du was falsch gemacht. Nimm dann zuerst mal den ATMega16. Bzw. in der Praxis ist es oft möglich Pins mehrfach zu verwenden, da man sie ja jederzeit in ihrer Funktion umschalten kann. Man kann z.B. Tasten in einer Matrix verschalten, ein LCD mittels Schieberegister über 3 Leitungen ansteuern, LEDs multiplexen, für SPI und I2C eine Leitung gemeinsam verwenden, mehrere I2C oder 1-Wire an den gleichen Leitungen anschließen usw. Peter
ich kann nicht jede woche neu ätzen..deshalb hab ich ein board gebaut wo ich halt alles belegen kann (mittels dip schalter) wie ich es will. ich möchte mir ein ziemlich einfaches programm schreiben um das nochmal klar zu machen. an den eingängen sind 11 taster (portb und portd) an portc und portd-pin0 sind 7 leuchtdioden angeschlossen. beim drücken jedes tasters soll also eine andere kombination an den leds ausgegeben werden..frage: ist das jetzt wirklich ein prog das ihr zu hoch für nen anfänger haltet??? wenn ich das datenblatt richtig verstanden hab..das is bei englisch immer so ne sache bei mir :) - muss man halt die zusatzfunktionen erst freischalten..also standartmässig sind es alles io ports!!! ich würde den reset also ständuig auf high schalten über dip was bei dem board kein prob ist..es geht mir nur ums brennen!!..is das so kompliziert?! ich will nur nicht erst wieder chips bestellen..dann is bis mitte nächster woche erstmal ruhepause :/
Also nochmal: RESET, MOSI, MISO, SCK führst Du auf einen Connector (siehe Tutorial) zum Programmieren. XTAL1 und XTAL2 je 22pF gegen Masse und einen Quarz vorsehen, damit Du bei Bedarf mit externen Takt arbeiten kannst. RXD, TXD mit Standardbeschaltung MAX202 und Sub-D9 vorsehen, wenn Du mal was mit der UART zum PC machen willst. Jetzt darfst Du alle übrigen Pins mit LEDs oder Tasten beschalten, wie Du lustig bist. Peter
PS.. scheint wohl schneller zu gehen 30 zeilen text zu schreiben was man machen sollte und was nicht also 9 zeilen assembler..danke auch :(
die frage ist ob ich die ports MOSI MISO SCK RXD TXD trotzdem als eingang nutzen darf oder nicht mit der uart will ich auf dem board erstmal gar nichts machen
Scherzkecks, wie soll man denn in Assembler beschreiben, welch Pins für Sonderfunktionen frei bleiben müssen ? Peter
vielleicht über ein register oder so..das frage ich ja..ich will im prinzip keine sonderfunktionen da ich erst angefangen hab.. aber der reset sollte schon bleiben damit ich den chip weiterhin nutzen kann für isp
Der Erfahrene kann natürlich verschiedene Funktionen kombinieren. Der Anfänger tut sich damit eher schwer, sollte also die einzelnen Sachen exklusiv lassen, wenn er nicht gerade auf graue Haare steht. Ich hatte Dich so verstanden, daß Du das Bord längere Zeit benutzen willst und dann ist eine UART schnell interessant (Bootloader, Debugausgaben). Peter
nein..ich will mit dem board über einen timer die eingangsänderungen abfragen..später die int0 int1 geschichten vielleicht mal nen zweiten timer dazu..ist reines experimentierboard halt mit externen osc. die verschaltung dafür hab ich auch geändert weil man den reset wie mir oben gesagt wurde nicht als ausgang nutzen soll. es sind zwar pads auf der platine mit denen ich extern später mal was zufügen kann, aber das ist erstmal uninteressant..wie gesagt..läuft über 8fach dips. wie man nen port als aus oder eingang definiert ist im tutorial schön gezeigt..nur leider nicht für den portb..und dazu würde ich halt gern mehr wissen..frage ich halt anders: ldi r16, 0xFF out DDRC, r16 ;Port C durch Ausgabe von 0xFF ins ;Richtungsregister DDRB als Ausgang konfigurieren ldi r16, 0x00 out DDRB, r16 ;Port B durch Ausgabe von 0x00 ins ;Richtungsregister DDRD als Eingang konfigurieren ldi r16, 0xFF out PORTC, r16 ;PORT C auf 0xFF setzen -> alle LEDs aus kann man das so an port c machen oder muss ich was einfügen damit man reseten kann..wenn ja was?? das ist ein etwas abgewandeltes bsp aus dem tutorial io grundlagen. die frage dazu: arbeitet dieser mit externen oder internen takt und wenn er intern ist..wie bekomme ich ihn auf extern..das sind doch nun wirklich nur noch 4 befehle oder so..also bitte..keine langen diskusionen sondern einmal helfen..danke an die die mich erhören gruss tim
Also ich hab auch erst ne weile gebraucht aber man kommt hinter alles irgendwann. Für ISP benötigst du MOSI, MISO, SCK und /RESET. Da der Mega 8 zu wenig Pins hat, ist der /RESET Pin mit ner doppel Funktion belegt. Die kann man aber nur nutzen wenn man per Fuse den AVR sagt man will dies tun. Wenn du also die Fuse brennst hast du keinen Reset Pin mehr dafür einen I/O Pin. Da du dann kein /RESET hast, kannst du KEIN ISP mehr machen. Der Atmel lässt sich dann nur noch im parallel - Mode programieren. Im Program kannst du da gar nix einstellen. Wenn die Fuse nicht programmiert hast, kannst du in DDRC schreiben was du willst. Es ändert nichts an der Funktion des /RESET Pins.
ah..danke sebastian...fuse deshalb wahrscheinlich weil du beim brennen irgendwas zerstörst und damit den pin 6 als io definierst. das passiert also nur beim brennen..gut..da weiss ich bescheid..ich dachte man müsste das über die programmierung machen :) bit gesetzt heisst zweitfunktion, bit gelöscht io..aber das war ja dann wohl falsch..danke für die aufklärung!! :) wie sieht das beim oscillator aus?? hat da noch wer was für mich?? dann frag ich auch nicht weiter :)
so langsam komm ich dahinter..also die zweitbelegung ist nur möglich wenn ich fuses zerstöre und somit entgültig oder wie?! das würde bedeuten das ich wenn ich isp nutze die 3 pins (mosi miso sck) nicht als eingang belegen darf da ich für io an den drei pins die fuses brennen muss..stimmt das so???
Nein. 1. Die Fuse kann wieder zurückgesetzt werden, ist also nicht für immer zerstört. 2. mosi miso sck werden nicht durch eine Fuse ein/ausgeschaltet, sondern automatisch. (Programmieralgorithmus, siehe Datenblatt) Die Datenblätter vom Atmel sind wirklich vorbildlich - dort steht genau das alles drin. Wie schon mehrfach erwähnt, kann man miso mosi und sck auch anderweitig verwenden. Allerdings sollte man sich darüber im klaren sein, was man macht. Beispielsweise die Verwendung des sck als Eingang ist nich so gut - wenn Deine Applikationsschaltung den Pin auf Low zieht, kann Dein Programmierer machen was er will - er wird den Controller nicht programmieren können. Den Reset-Pin würde ich nur im absoluten Notfall als Portpin verwenden, denn Du schießt Dir ins Knie, wenn Du den Reset abschaltest. Und immer schön dran denken: Eine Fuse gesetzt, d.h. programmiert, bedeutet: Fuse = 0. (Steht auch im Datenblatt) Solange Du nur mit einer Experimentierplatine herumprobierst, würde ich es nicht komplizierter machen, als notwendig.
Hi Tim, mit Spaßvogel hast du garnicht so unrecht. Auch ich habe es nicht böse gemeint, doch deine Fragen zeigten ganz deutlich, dass du dich nicht ernsthaft mit dem Datenblatt befasst hast. Daher mein sehr überspitzter undiplomatischer Hinweis. Dachtest du, meine Anfangszeit war leichter? Auch ich habe Platinen verschrottet weil ich sie zu voreilig entwickelt hatte. Dies passiert jedem mal, der kreativ etwas selbst macht (naja, den notorischen "Nachbauern" passiert sowas seltener). <ironie> Doch man kann nicht erwarten, dass ATMEL die Funktion des Resetpins ändert, nur weil du ihn schon anderweitig verplant hast. :) </ironie> Und wenn ich mir so die anderen Beiträge ansehe muss ich feststellen, dass fast überall ein (teils sehr dezenter) Hinweis zu finden ist, dass du die Nase mal ins Datenblatt stecken solltest. :) Nicht so direkt wie ich, aber immerhin. Da lag ich also gar nicht so doll daneben. Beste Grüße und viel Erfolg, Klaus (Großes K und kleine Laus)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.