Servus, ist es möglich den Resetpin (PC6) als Ausgang zu benutzen, aber seine Resetfunktion trotzdem zu behalten? Alternativ würde auch noch Port D gehen, wenn dadurch aber UART nicht gestört werden kann. µC: ATmega8 Benutzt werden: 1 ganzer Port (wahrscheinlich B) und von einem anderen Port 7 Pins. Da würde sich natürlich Port C perfekt eignen, da er genau 7 Pins hat. Allerdings ist einer davon eben der Resetpin. Ich vermute, dass ich ihn nicht benutzen kann. Dann bliebe noch Port D. Da sind aber die beiden Pins für RxD und TxD. Hätte ich nichts einzuwenden, wenn UART ständig verfügbar sein kann, obwohl die Pins (oder zumindest einer) benutzt werden. Die dritte Möglichkeit was sicher geht, ist einfach einen Pin vom anderen Port benutzen. Z.B. PD6 statt PC6. Möchte ich persönlich nur machen, wenns gar nicht anders geht, da es einigen zusätzlichen Programmieraufwand mit sich bringt. Was wie geschalten werden soll, kommt über UART in den EEPROM und wird von dort ausgelesen und durchlaufen. Welche Lösung ist also die Beste?
Hi Warum so kompliziert? Natürlich kannst du mischen. In Assembler ist das vielleicht ein Aufwand von 4 -8 Zeilen. Wenn du dir ein kleines UP für die Ausgabe schreibst, dann kannst du dieser Routine ein Byte übergeben. In der Routine trennst du es wie gewünscht auf. Ich sehe da kein Problem. Ich denke aber, du hälst dich daran fest, einfach immer ein Byte ausgeben zu müssen, weil's schöner ist. Mittlerweile richten sich die Programmierer mehr nach dem (einfacheren ) Layout. Ich halt es auch so. Ein Aufruf
1 | Read_Port |
liefert mir bspw. ein Byte Read_In und die Folge
1 | LDS Set_Out, Register |
2 | Write_Port |
setzt die Portpins der verschiedenen Ports. Wenn die Routinen zum Lesen noch am Anfang der Loop-Schleife des Hauptprogrammes stehen und die Zuweisungsroutine am Ende aufgerufen wird, hat man eine saubere Struktur. Gruß oldmax
der resetpin ist ziemlich wichtig für die serielle programmierung ... wenn du deinen µC HV-parallelprogrammieren kannst, kannst du auch den reset sowie serielle programmierung abschalten und den resetpin als IO benutzen ... (ich bin mir nur nicht ganz sich ob es nicht noch spezielle regelungen in der benutzun des pins dann geben) es hatte mich aber auch oft gestört nie einen kompletten 8bit PORT auf dem ATmega8 benutzen zu können... da gewöhnt man sich drann ... eine ausgabefunktion die einem dann das sendebyte bitweise auf die ausgangsbits verteilt schafft abhilfe... Problem: erhöter Speicherbedarf, erhöter Prozessorzeitaufwand
>Ich denke aber, du hälst dich daran fest, einfach immer ein >Byte ausgeben zu müssen, weil's schöner ist. Nein. Es wird sowieso jeder Pin extra geschalten, es geht mir da eigentlich nur im die einfachere Zuordnung. >der resetpin ist ziemlich wichtig für die serielle programmierung ... Genau das ist der Grund warum ich frage, ob die Resetfunktion trotz Benutzung noch funktionsfähig bleibt. Aber wie es scheint, geht es wohl nicht. Über UART sende ich eine Ziffer die dann für den betreffenden Pin steht. Bsp: PORTB |= (1 << empfangene_ziffer); // (vereinfacht) Dann werde ich aber vermutlich eine Abfrage für Pin 6 einbauen. Ist ja nicht viel Aufwand mehr, mir ging es nur um das mögliche mit dem Resetpin. Lieber fragen, bevor man am Ende ISP nicht mehr geht. Thx euch.
Hi Profitroll schrieb: >Nein. Es wird sowieso jeder Pin extra geschalten, es geht mir da >eigentlich nur im die einfachere Zuordnung. Einfachere Zuordnug für's Programmoder Layout? Anhand meiner Frage erkennst du, das "einfacher" relativ ist. In Programm kannst du so einfach bleiben wie du magst, lediglich das Unterprogramm, welches nun deine Bits auf die Ausgänge verteilt, muß die Zuordnung machen. Auch die Eingänge können so verstreut liegen, wie sie wollen, innerhalb des Programmes hast du sie in einem Byte, eben durch eine entsprechende Routine. In Assembler kann ichs erklären:
1 | Mein_Ausgangsbyte: . Byte ; Bit 0 = Port C 2 |
2 | ; Bit 1 = Port C 3 |
3 | ; Bit 2 = Port B 5 |
4 | ; Bit 3 etc. |
5 | Mein_Eingangsbyte: . Byte ; Bit 0 = Port B 2 |
6 | ; Bit 1 = Port B 3 |
7 | ; Bit 2 = Port D 0 |
8 | ; Bit 3 etc. |
in einem Unterprogramm sammelst du nun die Portbits ein und setzt die entsprechenden Bits in Mein_Eingangsbyte. Diese Routine rufst du am Anfang deiner Programmschleife auf. Anschließend arbeitest du nur mit der Variablen. Das selbe gilt für die Ausgänge. Das Unterprogramm zerlegt die Variable Mein_Ausgangsbyte und setzt die entsprechenden Portbits. Dieses UP rufst du am ende deiner Programmschleife auf. Innerhalb deines Programmes arbeitest du nur mit der Varialen. Nun ist das Layout "einfach" und das Programm " einfach ". Gruß oldmax Gruß oldmax
Wie willst Du denn eine 0 ausgeben oder einlesen, solange der Resetpin seine Funktion als Reset behält? Ohne PSI kommst Du da nicht weiter, 0 V sind nunmal 0 V.
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.