Noch ein AVR-Neuling, der Hilfe braucht

Erzgebirgler47

Neues Mitglied
12. März 2010
3
0
0
Sprachen
Ebenfalls einen netten Gruß an alle hier.
Über mich:
Ich bin 63 Jahr alt und seit frühester Jugend eigentlich mit Elektronik bzw. was man damals so nannte (Germaniumkristall mit Drehko und Spüle, daran ein hochohmiger Kopfhörer war das erste Eigenbauradio für Mittelwelle) vertraut.
Später Berufsausbildung als Fernmeldemonteur, dann Fernmeldemechanikermeister und noch später Ing. für Fernmeldetechnik.
Erste Gehversuche 1980 mit dem Ost-Typ des Z 80 (U880), der anfangs noch komlett in Maschine, später auch in Assembler und Basic programmiert werden musste. Nach einem späteren kurzen Ausflug zu Pascal und Turbo-Pascal habe ich mich dann lange kaum noch mit Mikrorechnern befasst, bis ich 1995 begann, für meine Gas-Heizung eine Steuerung zu bauen. Ich hatte mich damals für die C-Control 1.1 entschieden, die auch heute noch läuft.
Allerdings werden halt die Anforderungen immer höher, z.B. mehr und andere Temperatursensoren, Überwachung ob Fenster und Türen verschlossen sind, Fernsteuerung übers Web usw.
Da ich nun bald in den Ruhestand gehe, habe ich mir vorgenommen dies nach und nach alles zu realsieren, aber die CC1 ist damit natürlich überfordert.
Deshalb hatte ich mir eine CC-Pro (ATMega128) bei Conrad gekauft. Leider ist der mitgelieferte Interpreter m.E. nicht ausgereift, sehr langsam und somit für meine Zwecke nicht geeignet. Deshalb und weil die Sprache sehr MS-VB, unter der ich auch viele PC-Programme geschrieben habe, ähnelt, habe ich mich Bascom zugewandt. Bis auf ein Problem liefen die Tests bisher auch sehr zufriedenstellend, zumal ich, entschuldigt die Reklame, im Forum mikrokontroller.net ein Proggi gefunden habe, mit dem man gefahrlos mit Bascom erstellte bin-Dateien in die CC-Pro bringen kann.
Allerdings benötige ich für die von mir verwendeten Thermometerbausteine eine sehr schnelle Interruptroutine, die mir einfach nicht gelingen will.
An der CC1 hatte ich das mit Hardware (Schieberegister zum Einlesen der Impulse, einem MMV, der das wieder überschreiben verhindert und der CC1 das Ende des Einlesens signalisiert, gelöst.
Die Elektronik ist aber nun in die Jahre gekommen und ich wollte es per Interrupt-Routine auf der CC-Pro lösen, was leider noch nicht so richtig klappt. Der Thermometerbaustein sendet jede Sekunde auf einer Taktleitung 13 (sehr schnell und sehr kurz, kann es leider nicht messen) Impulse und legt auf einer Datenleitung zeitgleich das Datum des jeweiligen Bits (13-Bit-Codierung) an. Mit der nachfolgenden, in Bascom programmierten, ISR schaffe ich aber nicht, alle Ints abzufangen.
Da ich aber mit ASM vollkommen aus der Übung bin und es mir altershalber auch schwer fällt, das alles nochmal neu zu lernen, hier die Frage, ob mir jemand helfen kann. Die Konfigs und alles andere in Bascom habe ich im folgenden Ausschnitt mal weggelassen, weil das funktioniert.
Die ISR:
Label2: 'wird bei Int durch Taktleitung angesprungen
Thempfangswert = Thempfangswert + Portb.0
'ThThempfangswert ist Integer
'Wert Portb.0 (0 oder 1) wird immer als niederwertigstes Bit aufaddiert
Shift Thempfangswert , Left ' danach linksschieben um den Platz wieder freizumachen
Incr Thinterruptzaehler ' Interupts mitzählen
If Thinterruptzaehler >= 13 Then ' um nach 13 Pulsen den Int abzuschalten
Disable Int0
End If
Return 'zurück zur Main mit der Auswertung und danach alles auf 0 und Int wieder einschalten.
Kann mir vielleicht jemand hier das in eine schnelle ASM-ISR umwandeln?

Viele Grüße Erzgebirgler47
 
trotzdem ich dir bei deinem problem leider nicht helfen kann: willkommen hier :)
und da du dich erzgebirgler nennst, nehm ich an, du kannst mit chemnitz was anfangen, dort sitz ich nämlich grad :)
 
Hallo Erzgebirgler47
für das Einlesen über Clock- und Datenleitung gibt es in Bascom den ShiftIn Befehl.
Dort kannst du die Clock- und Datenleitung angeben, ebenso wie die Anzahl der zu lesenden Bits. Damit du weißt, wann die Übertragung losgeht, wirst du evtl. den ersten Puls über einen externen Int. abfangen müssen, so wie du das jetzt wohl für alle Bits machst.

Das Problem mit der Zeit kommt durch die Register Speicherorgie, die Bascom beim Aufrufen der ISR veranstaltet. Wenn du dich gut genug auskennst, kannst du die mit der NOSAVE Option des On Int Befehl abwählen, musst dann aber selber die nötigen Register sichern.

HBA
 
Hallo Ihr Beiden,
erst mal schöne Grüße nach Chemnitz, ca. 15 km von hier.
Deine Tipp, HinterBlauenAugen, werde ich demnächst mal ausprobieren und dann davon berichten.
Grüße aus dem Erzbegirge bei Sch..-Wetter.
Erzgebirgler47
 

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