hallo zusammen, ich bin neu hier und komme gleich mit einer frage. da ich in sachen programmierung und microcontrollern eine absolute null bin, dachte ich mir ich frage die experten mal. also ich möchte ein programm haben, mit dem ich 4 eeproms ansteuern kann. als mc habe ich an einen attiny45 gedacht. pb0,pb1,pb2 und pb3 sollen die ce's der eeproms schalten. pin 3 wird als eingang benutzt. am eingang pin 3 liegt ein high an. vcc liegt an pin 8. gnd an pin 4. pb0=ce1 pb1=ce2 pb2=ce3 pb3=ce4 das programm soll mit folgendem muster starten: ce1=0 ce2=1 ce3=1 ce4=1 dieser wert soll auch in das eeprom des attiny45 geschrieben werden. falls vpp auf null fällt, soll der wert dennoch gespeichert bleiben. fällt pin 3 von high auf low und danach direkt wieder auf high, soll folgendes muster starten: ce1=1 ce2=0 ce3=1 ce4=1 dieser wert soll auch in das eeprom des attiny45 geschrieben werden. falls vpp auf null fällt, soll der wert dennoch gespeichert bleiben. fällt pin 3 von high auf low und danach direkt wieder auf high, soll folgendes muster starten: ce1=1 ce2=1 ce3=0 ce4=1 dieser wert soll auch in das eeprom des attiny45 geschrieben werden. falls vpp auf null fällt, soll der wert dennoch gespeichert bleiben. fällt pin 3 von high auf low und danach direkt wieder auf high, soll folgendes muster starten: ce1=1 ce2=1 ce3=1 ce4=0 danach soll es wieder von vorne beginnen. es wäre super wenn sich jemand von euch erbarmen würden. für mich ist das leider alles chinesisch vielen vielen dank im vorraus
:
Verschoben durch User
Hi, soll das Hausaufgabe sein? Wo ist dein Problem? Was soll es am ende machen? Du hast 4 eeproms (eigenständige ICs) und willst diese reihum nach gewissen Bedingungen weiterschalten? MfG ich
Etwas mitarbeiten musst du schon, helfen werden wir gerne. Hast du schon selber angefangen mit C oder ASM?
Das wirst du so nicht hinbekommen. Die Registernamen werden groß geschrieben. Bei dir scheint aber die Shift-Taste nicht zu funktionieren.
Shift schrieb: > Das wirst du so nicht hinbekommen. Die Registernamen werden groß > geschrieben. Bei dir scheint aber die Shift-Taste nicht zu > funktionieren. er erwartet doch auch, dass jemand ihm das Programm schreibt, da braucht ja der nur der 'Helfer' eine funktionierende Shift-Taste...
@ich : Ja, genau das soll passieren. @PeterII: Ein bisschen C kann ich schon, einfache Programme habe ich mal geschrieben. Allerdings habe ich noch keinen Microkontroller programmiert. Angefangen habe ich nicht. Ich weiss leider nicht wo ich starten soll.
Tobias M. schrieb: > Ich weiss leider nicht wo ich > starten soll. z.B. hier: http://www.mikrocontroller.net/articles/AVR-Tutorial und hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Falls dann konkrete Fragen auftauchen sollten, wird dir dann in diesem Forum bestimmt geholfen...
Tobias M. schrieb: > am eingang pin 3 liegt ein > high an. Wer oder was bedient den Pin 3? > falls vpp auf null fällt Wo kommt jetzt auf einmal vpp her? Ist das der Pin 3? > von euch erbarmen würden. für mich ist das leider alles chinesisch Dann frage ich mich, wozu du das eigentlich brauchst? Denn wer mit einem EEPROM umgehen kann, sollte doch eigentlich auch so ein einfaches Programm hinkriegen. Oder ist das wieder so ein Modding-Projekt, wo man einer anderen Schaltung ein anderes EEPROM unterjubelt, damit es irgendwas macht man selbst aber eigentlich nicht weiß, was man da tut.
:
Bearbeitet durch User
1 | Config Portb.4 = Input |
2 | Config Portb.0 = Output |
3 | Config Portb.1 = Output |
4 | Config Portb.2 = Output |
5 | Config Portb.3 = Output |
6 | |
7 | |
8 | Ce1 Alias Portb.0 |
9 | Ce2 Alias Portb.1 |
10 | Ce3 Alias Portb.2 |
11 | Ce4 Alias Portb.3 |
12 | |
13 | |
14 | |
15 | Dim B As Byte |
16 | Readeeprom B , 1 |
17 | |
18 | If B = 1 Then |
19 | Goto Rom1 |
20 | Elseif B = 2 Then |
21 | Goto Rom2 |
22 | Elseif B = 3 Then |
23 | Goto Rom3 |
24 | Elseif B = 4 Then |
25 | Goto Rom4 |
26 | Elseif B = 0 Then |
27 | Goto Rom1 |
28 | End If |
29 | |
30 | Anfang: |
31 | Rom1: |
32 | |
33 | Ce1 = 0 |
34 | Ce2 = 1 |
35 | Ce3 = 1 |
36 | Ce4 = 1 |
37 | |
38 | |
39 | Portb.4 = 1 |
40 | B = 1 |
41 | Writeeeprom B , 1 |
42 | |
43 | |
44 | If Portb.4 = 0 |
45 | Waitms 500 |
46 | Portb.4 = 1 |
47 | Then Goto Rom2 |
48 | End If |
49 | |
50 | Rom2: |
51 | |
52 | Ce1 = 1 |
53 | Ce2 = 0 |
54 | Ce3 = 1 |
55 | Ce4 = 1 |
56 | |
57 | Portb.4 = 1 |
58 | B = 2 |
59 | Writeeeprom B , 1 |
60 | |
61 | |
62 | If Portb.4 = 0 |
63 | Waitms 500 |
64 | If Portb.4 = 1 |
65 | Then Goto Rom3 |
66 | End If |
67 | |
68 | Rom3: |
69 | |
70 | |
71 | Ce1 = 1 |
72 | Ce2 = 1 |
73 | Ce3 = 0 |
74 | Ce4 = 1 |
75 | |
76 | Portb.4 = 1 |
77 | B = 3 |
78 | Writeeeprom B , 1 |
79 | |
80 | |
81 | If Portb.4 = 0 |
82 | Waitms 500 |
83 | If Portb.4 = 1 |
84 | Then Goto Rom4 |
85 | End If |
86 | |
87 | Rom4: |
88 | |
89 | Ce1 = 1 |
90 | Ce2 = 1 |
91 | Ce3 = 1 |
92 | Ce4 = 0 |
93 | |
94 | Portb.4 = 1 |
95 | B = 4 |
96 | Writeeeprom B , 1 |
97 | |
98 | |
99 | If Portb.4 = 0 |
100 | Waitms 500 |
101 | If Portb.4 = 1 |
102 | Then Goto Rom1 |
103 | End If |
104 | |
105 | |
106 | Goto Anfang |
107 | |
108 | End |
Das habe ich bisher
:
Bearbeitet durch User
Hallo, also so wie das hier in dem Pseudocode gepostet ist, sollte es mit BASCOM wenig Probleme geben die gestellte Aufgabe zu lösen. Grüße BT
BT schrieb: > also so wie das hier in dem Pseudocode gepostet ist, sollte es mit > BASCOM wenig Probleme geben die gestellte Aufgabe zu lösen. ist zwar nett von dir, aber die gotos müssen hier nicht wirklich sein. Kann man denn ein BASCOM nicht sauber programmieren?
Peter II schrieb: > Kann man denn ein BASCOM nicht sauber programmieren? BASCOM wurde in Echternach entwickelt waehrend der Springprozession. Da macht man immer 2 vor und einer zurueck :-) http://de.wikipedia.org/wiki/Echternacher_Springprozession
Helmut Lenzen schrieb: > BASCOM wurde in Echternach entwickelt waehrend der Springprozession. Da > macht man immer 2 vor und einer zurueck :-) Dich habe ich für Intelligenter gehalten. Wie man sich täuschen kann. :-(
Tobias M. schrieb: > Das habe ich bisher So schlecht ist das gar nicht. Mit der Auswertung des Inputs stehst du noch ein wenig auf Kriegsfuss. Leg deinen bisherigen Code zur Seite und beschftige dich doch mal damit, wie man an einem Input erkennt, dass ein Pegelwechsel stattfindet, bzw. wie man auf einen Pegelwechsel wartet. Und studier ein wenig, welche Basis-Strukturen du eigentlich zur Verfügung hast. Neben if und goto gibt es da noch mehr. Du wirst zum Beispiel ein WHILE brauchen.
$regfile = "attiny45.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 Config Portb.4 = Output Portb.4 = 0 Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Output Ce1 Alias Portb.0 Ce2 Alias Portb.1 Ce3 Alias Portb.2 Ce4 Alias Portb.3 Dim B As Byte Readeeprom B , 1 If B = 1 Then Goto Rom1 Elseif B = 2 Then Goto Rom2 Elseif B = 3 Then Goto Rom3 Elseif B = 4 Then Goto Rom4 End If Anfang: Rom1: Config Portb.4 = Output Portb.4 = 0 Ce1 = 0 Ce2 = 1 Ce3 = 1 Ce4 = 1 Portb.4 = 1 B = 1 Writeeeprom B , 1 Config Pinb.4 = Input Bitwait Pinb.4 , Reset Wait 2 Bitwait Pinb.4 , Set Rom2: Config Portb.4 = Output Portb.4 = 0 Ce1 = 1 Ce2 = 0 Ce3 = 1 Ce4 = 1 Portb.4 = 1 B = 2 Writeeeprom B , 1 Config Pinb.4 = Input Bitwait Pinb.4 , Reset Wait 2 Bitwait Pinb.4 , Set Rom3: Config Portb.4 = Output Portb.4 = 0 Ce1 = 1 Ce2 = 1 Ce3 = 0 Ce4 = 1 Portb.4 = 1 B = 3 Writeeeprom B , 1 Config Pinb.4 = Input Bitwait Pinb.4 , Reset Wait 2 Bitwait Pinb.4 , Set Rom4: Config Portb.4 = Output Portb.4 = 0 Ce1 = 1 Ce2 = 1 Ce3 = 1 Ce4 = 0 Portb.4 = 1 B = 4 Writeeeprom B , 1 Config Pinb.4 = Input Bitwait Pinb.4 , Reset Wait 2 Bitwait Pinb.4 , Set Goto Anfang End Das ist jetzt das Programm. Läuft auch soweit gut, jedoch nicht 100%ig wie ich es möchte. Die Funktion, mit der auf die Änderung des Pegels an einem Eingang gewartet wird, heisst wohl bitwait. Ich hoffe das ist richtig so. Ich möchte allerdings das das Programm nur dann ein Rom weiter schaltet, wenn an Pinb.4 ein high ist, dann ein low und direkt danach wieder ein high. Mit Wait 2 funktioniert das so irgendwie nicht. Könnt ihr mir einen Tip geben?
Tobias M. schrieb: > Könnt ihr mir einen Tip geben? Um ohne das fehlerträchtige und deshalb nicht zu Unrecht viel gehaßte GOTO auszukommen, könntest du das Select...Case Statement verwenden und damit dein Programm auch übersichtlicher gestalten.
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.