loetstelle.net
Lötstelle Userforum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Digitale Lösung für Schaltungen / Problem?
Gehe zu Seite Zurück  1, 2, 3 ... 17, 18, 19, 20  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Microcontroller und DSP
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Paraboloid87



Anmeldungsdatum: 15.05.2009
Beiträge: 17

BeitragVerfasst am: Di 26.Mai 2009 22:56:39    Titel: Bauteile finden Antworten mit Zitat

Hi Gerold,
Ich habe gerade folgenden Versuch gemacht:
Einfach die LED dauerleuchten lassen. Jede Sekunde erlischt die LED jedoch kurzzeitig. kann es sein, dass der Atmega ständig resettet wird? wodurch auch immer?
und deshalb immer wieder auf den Startwert kommt und die erst Operation ausführt und sofort wieder resettet?

EDIT: Ja, das is der Fehler! Habe jetzt eine Schleife mit drei Print-Befehlen und jeweils 2 Sekunden Wartzeit dazwischen gebrannt. Es wird nur der erste Print-Befehl ausgeführt! Wenn ich in dem Code, den ich als letztes gepostet habe, die Wartezeit auf waitms 500 setze, dann schafft er 4 Additionen und dann fängt er von vorne an. Jetzt noch die Frage: Warum? Bzw, wie löst man ein solches reset überhaupt aus?
Es ist sicherlich ein Schaltungsfehler oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pcprofi



Anmeldungsdatum: 17.02.2008
Beiträge: 1459
Wohnort: Düren

BeitragVerfasst am: Di 26.Mai 2009 23:47:14    Titel: Bauteile finden Antworten mit Zitat

Frage:

Watchdog abgestellt? Wenn du nämlich sonst das Watchdog-Register nicht innerhalb eines bestimmten Zeitraumes resettest, dann macht er nen Reset...

Du kannst das in den FuseBits abstellen...

Gruß Rainer

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mi 27.Mai 2009 07:07:00    Titel: Bauteile finden Antworten mit Zitat

EDIT: Ups, da habe ich doch glatt die Beiträge auf der nächsten Seite übersehen. Smile

- Watchdog
- Reset-Widerstand

-----------------

Paraboloid87 hat folgendes geschrieben:
Habe es auch mit print "Hallo" etc versucht.
Wenn ich den Startwert von Zahl verändere, erfolgt einmal die Addition eines Schrittes - danach nichts mehr.
Das sollte doch heißen, dass der neue Wert nicht gespeichert wird oder die Addition nur eimal ausgeführt wird. Letzteres würde ich allerdings ausschließen.

Hallo Alex!

Vielleicht resetet sich der µC immer wieder. Lass den Reset-Pin zum Testen mal offen und teste auch einmal, mit 10 kOhm nach VCC. Programmer abschließen -- nur die UART-Verbindungen und GND drann lassen. Wie ist dein µC angeschlossen? Schaltplan?
Code:
$regfile = "m8def.dat"
$crystal = 3686411
$baud = 2400
$hwstack = 100
$swstack = 100
$framesize = 100

'Test-LED
Ddrb = &B00000010                                           
Portb.1 = 1

Dim Zahl As Word
Zahl = 20


Do
   Print "Hallo 1"

   Wait 1
   Toggle Portb.1
   Zahl = Zahl + 2
   Print Zahl
   
   Wait 1
   Print "Hallo 2"
Loop

End

Wenn der Speicher hin wäre, dann müsste es einen Unterschied geben, wenn du die STACK-Größen und den Frame veränderst. Weiters belegt in diesem Programm der "Platzhalter" die ersten beiden Byte im übrigen Speicher. Die Variable "Zahl" ist somit nicht mehr auf dem selben Platz.
Code:
$regfile = "m8def.dat"
$crystal = 3686411
$baud = 2400
$hwstack = 100
$swstack = 100
$framesize = 100

'Test-LED
Ddrb = &B00000010                                           
Portb.1 = 1

Dim Platzhalter as Word
Dim Zahl As Word
Zahl = 20


Do
   Print "Hallo 1"

   Wait 1
   Toggle Portb.1
   Zahl = Zahl + 2
   Print Zahl
   
   Wait 1
   Print "Hallo 2"
Loop

End

Aus der Hilfe:
Zitat:
The $REGFILE directive must be the first statement in your program. It may not be put into an included file since only the main source file is checked for the $REGFILE directive.

Einen wirklichen Unterschied, konne ich nicht feststellen. Aber wenn es schon in der Hilfe steht...

Schon mit einem zweiten µC getestet? Schaltplan? Foto vom Aufbau?

mfg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.


Zuletzt bearbeitet von gerold am Mi 27.Mai 2009 07:12:43, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Paraboloid87



Anmeldungsdatum: 15.05.2009
Beiträge: 17

BeitragVerfasst am: Mi 27.Mai 2009 07:07:37    Titel: Bauteile finden Antworten mit Zitat

Guten Morgen!
Ja es war der Watchdog-Timer eingestellt! Ich lasse jetzt jede Sekunde den Watchdog mit !WDR resetten und nun funktioniert es.
Wie kann ich denn den Watchdog über die FUSE-bits ausschalten? Habe dazu jetzt keine konkrete Anleitung gefunden und wollte dort nicht einfach "rumexperimentieren".

Danke Gerold und PCprofi!
Grüße,
Alex
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mi 27.Mai 2009 07:14:35    Titel: Bauteile finden Antworten mit Zitat

Paraboloid87 hat folgendes geschrieben:
Wie kann ich denn den Watchdog über die FUSE-bits ausschalten?

Hallo Alex!

Dafür ist das FuseBit "WDTON" zuständig.

- http://halvar.at/elektronik/kleiner_bascom_avr_kurs/fuse_lock_bits_1/
- http://halvar.at/elektronik/kleiner_bascom_avr_kurs/fuse_lock_bits_2/
- http://halvar.at/elektronik/kleiner_bascom_avr_kurs/fuse_lock_bits_3/

In Teil 1 und Teil 3 wird jeweils kurz auf den Watchdog-Timer eingegangen.

mfg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Paraboloid87



Anmeldungsdatum: 15.05.2009
Beiträge: 17

BeitragVerfasst am: Mi 27.Mai 2009 12:35:12    Titel: Bauteile finden Antworten mit Zitat

Hallo,
ich habe jetzt per myAVRProgTool die high Fuses geschrieben. und zwar genau so wie in der ersten Abbildung von

http://halvar.at/elektronik/kleiner_bascom_avr_kurs/fuse_lock_bits_3/.

Danach habe ich in der Konsole nur noch Wirrwarr angezeigt bekommen. Also dachte ich mir, dass ich wahrscheinlich den externen Quarz in den Fuse-Bits deaktiviert habe. Diesen habe ich mit Hilfe von myAVRQuickProg wieder aktiviert. Seitdem kann ich mich nicht mehr mit dem Microkontroller verbinden. Weder Schreiben noch Auslesen funktioniert.
Spannung habe ich auch schon aus- und angeschaltet.

Ich habe mit dem myAVRProgTool nichts anderes gemacht, als auf den Reiter High Fuses geklickt (Ich sehe gerade, dass man daneben noch einen Haken setzen kann im Reiter. Den habe ich nicht gesetzt) und dann den Haken bei "SPI enabled" und den Punkt bei "Boot Flash section size = 1024" gesetzt.
Danach habe ich auf "Jetzt Schreiben" geklickt.

Kann hier ein Fehler unterlaufen sein? Etwas anderes habe ich nicht gemacht.

Habe leider nur diesen einen Atmega8 Sad

Gruß
Alex


Zuletzt bearbeitet von Paraboloid87 am Mi 27.Mai 2009 17:52:33, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paraboloid87



Anmeldungsdatum: 15.05.2009
Beiträge: 17

BeitragVerfasst am: Mi 27.Mai 2009 13:58:10    Titel: Bauteile finden Antworten mit Zitat

Noch eine weitere Frage: Sollte der Atmaga8 vielleicht doch "verfuset" sein, gibt es dann mit dem MYSMARTUSB die möglichkeit ihn zu retten?

Bevor ich mir einen Programmer zugelegt habe, hatte ich extra auf dieses Merkmal geachtet. (Ich hatte es damals in einem thread gelesen.) Leider finde ich jetzt keine Anleitung dazu.

Gruß
Alex
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paraboloid87



Anmeldungsdatum: 15.05.2009
Beiträge: 17

BeitragVerfasst am: Mi 27.Mai 2009 18:02:12    Titel: Bauteile finden Antworten mit Zitat

Hallo,
wollte nur sagen, dass ich das Problem gefunden habe! Der Mikrokontroller geht doch noch. Ich hatte ein Quarzkabel falsch angeschlossen!

Jetzt ist der Watchdog aus und das Terminal zählt fleißig hoch.

Danke für eure Hilfe!

Aber die Sache, ob man den "verfuseten" Mikrokontroller mit dem MYSMARTUSB wieder in den Griff kriegt, würde mich trotzdem noch interessieren!

Bis demnächst,
Gruß,
Alex
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mi 27.Mai 2009 19:18:04    Titel: Bauteile finden Antworten mit Zitat

Paraboloid87 hat folgendes geschrieben:
Aber die Sache, ob man den "verfuseten" Mikrokontroller mit dem MYSMARTUSB wieder in den Griff kriegt, würde mich trotzdem noch interessieren!

Hallo Alex!

Der "mySmartUSB MK3" kann auch "Hochvolt-Parallel". Damit kann der die AVRs auch dann wieder ins Leben zurückholen, wenn der Reset-Pin verstellt wurde.

Man kann die AVRs statt mit einem Quarz auch mit externen Oszillatoren betreiben. Wenn man versehentlich auf Oszillator stellt, aber nur einen Quarz hat, dann muss man den AVR zum erneuten Flashen mit einem Oszillator betreiben. Das geht mit einem NE555 oder sonst einem Taktgeber. Der "mySmartUSB MK3" hat auch so einen Taktgeber eingebaut, so dass man damit auch diesen Fehler beheben kann.

Der "mySmartUSB MK2" kann eigentlich nur dann nichts mehr ausrichten, wenn der Reset-Pin verstellt wurde. Oder wenn der AVR mit einem *anderen* Programmer so verstellt wurde, dass man den AVR nicht mehr über den "In System Programming"-Modus flashen kann. Das kann man aber nur mit einem anderen Programmer verstellen.

mfg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tux77



Anmeldungsdatum: 23.05.2009
Beiträge: 14
Wohnort: Erding

BeitragVerfasst am: So 31.Mai 2009 21:15:53    Titel: Bauteile finden Antworten mit Zitat

Hallo,

Ich habe jetzt mein Programm um den Sonnensensor erweitert,
aber es funktioniert nicht so wie es soll.
Hier mal das ganze Programm vielleicht entdeckt jemand einen Fehler.
Das Problem ist das die Rollos rundergefahren sind obwohl es dunkel (Lichtwert < als 492 (2.4v)) war. Gemessen habe ich 1.8 V am ADC0.
Code:
$regfile = "m32def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100

'Variablen
Dim Tuer_motor_counter As Integer
Dim Fenster_motor_counter As Integer
Dim Sonnen_sensor_counter As Integer
Dim Lichtwert As Integer
Dim Rollo_status As Bit

'Schalter
Taster_tuer_auf Alias Pind.1
Config Taster_tuer_auf = Input                              'Tür AUF

Taster_tuer_ab Alias Pind.0
Config Taster_tuer_ab = Input                               'Tür AB

Taster_gesamt_auf Alias Pinc.6
Config Taster_gesamt_auf = Input                            'Gesamt AUF

Taster_gesamt_ab Alias Pinc.5
Config Taster_gesamt_ab = Input                             'Gesamt AB

Taster_fenster_auf Alias Pinc.4
Config Taster_fenster_auf = Input                           'Fenster AUF

Taster_fenster_ab Alias Pinc.3
Config Taster_fenster_ab = Input                            'Fenster AB

Taster_fenster_stop Alias Pind.2
Config Taster_fenster_stop = Input                          'Fenster STOP

Taster_tuer_stop Alias Pind.3
Config Taster_tuer_stop = Input                             'Tuer STOP

'Motor
Motor_fenster_auf Alias Portd.7
Config Motor_fenster_auf = Output                           'Fenster AUF

Motor_fenster_ab Alias Portc.0
Config Motor_fenster_ab = Output                            'Fenster AB

Motor_tuer_auf Alias Portc.1
Config Motor_tuer_auf = Output                              'Tür AUF

Motor_tuer_ab Alias Portc.2
Config Motor_tuer_ab = Output                               'Tür AB

'Timer0 konfigurieren (15,2587890625 Überläufe/sec)
Config Timer0 = Timer , Prescale = 256
On Timer0 On_timer0
Enable Timer0

'ADC konfiguration
Config Adc = Single , Prescaler = Auto , Reference = Avcc



'Interrupts global einschalten
Enable Interrupts


'Hauptschleife
Do
   Debounce Taster_fenster_auf , 1 , Motor_fenster_auf_einschalten , Sub
   Debounce Taster_fenster_ab , 1 , Motor_fenster_ab_einschalten , Sub
   Debounce Taster_tuer_auf , 1 , Motor_tuer_auf_einschalten , Sub
   Debounce Taster_tuer_ab , 1 , Motor_tuer_ab_einschalten , Sub
   Debounce Taster_gesamt_auf , 1 , Gesamt_auf_einschalten , Sub
   Debounce Taster_gesamt_ab , 1 , Gesamt_ab_einschalten , Sub
   Debounce Taster_fenster_stop , 1 , Motor_fenster_stop , Sub
   Debounce Taster_tuer_stop , 1 , Motor_tuer_stop , Sub

   If Fenster_motor_counter = 0 Then
      Motor_fenster_auf = 0
      Motor_fenster_ab = 0
   End If
   If Tuer_motor_counter = 0 Then
      Motor_tuer_auf = 0
      Motor_tuer_ab = 0
   End If
   If Sonnen_sensor_counter = 0 And Rollo_status = 0 Then
      Gosub Sonnenautomatik_ab
   End If
   If Sonnen_sensor_counter = 0 And Rollo_status = 1 Then
      Gosub Sonnenautomatik_auf
   End If
Loop

End

'Timer0-Interrupt-Handler
On_timer0:
   If Tuer_motor_counter > 0 Then
      Decr Tuer_motor_counter
   End If
   If Fenster_motor_counter > 0 Then
      Decr Fenster_motor_counter
   End If
   If Sonnen_sensor_counter > 0 Then
      Decr Sonnen_sensor_counter
   End If
Return


'Motor einschalten
Motor_fenster_auf_einschalten:
   Motor_fenster_ab = 0
   Waitms 200
   Motor_fenster_auf = 1
   Fenster_motor_counter = 610                              ' ca. 40 sec.
Return

Motor_fenster_ab_einschalten:
   Motor_fenster_auf = 0
   Waitms 200
   Motor_fenster_ab = 1
   Fenster_motor_counter = 610                              ' ca. 40 sec.
Return

Motor_tuer_auf_einschalten:
   Motor_tuer_ab = 0
   Waitms 200
   Motor_tuer_auf = 1
   Tuer_motor_counter = 687                                 ' ca. 45 sec.
Return

Motor_tuer_ab_einschalten:
   Motor_tuer_auf = 0
   Waitms 200
   Motor_tuer_ab = 1
   Tuer_motor_counter = 610                                 ' ca. 40 sec.
Return

Gesamt_auf_einschalten:
   Motor_fenster_ab = 0
   Motor_tuer_ab = 0
   Waitms 200
   Motor_fenster_auf = 1
   Motor_tuer_auf = 1
   Tuer_motor_counter = 610
   Fenster_motor_counter = 610
   Sonnen_sensor_counter = 27468                            ' ca. 1800 sec.
   Rollo_status = 0
Return

Gesamt_ab_einschalten:
   Motor_fenster_auf = 0
   Motor_tuer_auf = 0
   Waitms 200
   Motor_fenster_ab = 1
   Motor_tuer_ab = 1
   Tuer_motor_counter = 687
   Fenster_motor_counter = 610                              ' ca. 40 sec.
Return

Motor_fenster_stop:                                         'Fenster STOP
   Motor_fenster_auf = 0
   Motor_fenster_ab = 0
Return

Motor_tuer_stop:                                            'Tür STOP
   Motor_tuer_auf = 0
   Motor_tuer_ab = 0
Return

'Sonnenautomatik
Sonnenautomatik_ab:
   Lichtwert = Getadc(0)
   Start Adc
   If Lichtwert > 492 Then
   Motor_fenster_auf = 0
   Motor_tuer_auf = 0
   Waitms 200
   Motor_fenster_ab = 1
   Motor_tuer_ab = 1
   Tuer_motor_counter = 427                                 'ca. 28 sec.
   Fenster_motor_counter = 336                              'ca. 22 sec.
   Sonnen_sensor_counter = 27468
   Rollo_status = 1
   Stop Adc
   Reset Lichtwert
   End If
Return

Sonnenautomatik_auf:
   Lichtwert = Getadc(0)
   Start Adc
   If Lichtwert < 471 Then
   Motor_fenster_ab = 0
   Motor_tuer_ab = 0
   Waitms 200
   Motor_fenster_auf = 1
   Motor_tuer_auf = 1
   Tuer_motor_counter = 687
   Fenster_motor_counter = 610
   Sonnen_sensor_counter = 27468
   Rollo_status = 0
   Stop Adc
   Reset Lichtwert
   End If
Return


MfG
Nicola
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tux77



Anmeldungsdatum: 23.05.2009
Beiträge: 14
Wohnort: Erding

BeitragVerfasst am: Di 02.Jun 2009 20:48:18    Titel: Bauteile finden Antworten mit Zitat

Hallo,

so das Programm von meinem letzten Artikel funktioniert, ich habe nur die Werte um 100 hochsetzen müssen. Laughing
Der mega32 misst was anderes als ich mit meinem Messgerät.
Nun hab ich aber doch noch eine Frage, der Controler reagiert jetzt ziemlich sensiebel auf jeden Lichtblitz der hell genug ist, wie kann ich ihn dazu bringen das er z.B. dreimal misst inerhalb einer halben Sekunde und dann erst auslöst?

MfG
Nicola
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Di 02.Jun 2009 22:01:15    Titel: Bauteile finden Antworten mit Zitat

Tux77 hat folgendes geschrieben:
wie kann ich ihn dazu bringen das er z.B. dreimal misst inerhalb einer halben Sekunde und dann erst auslöst?

Hallo Nicola!

Lege dir drei Variablen an, in die du drei mal hintereinander (mit kurzen Wartepausen, WAITMS) mit GETADC den Messwert schreibst.

Danach hast du drei Messwerte, die du auswerten kannst. Du kannst auch drei mal hintereinander Messen und daraus den Mittelwert bilden...

mfg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
bonie99



Anmeldungsdatum: 23.03.2009
Beiträge: 9

BeitragVerfasst am: Mi 03.Jun 2009 09:54:59    Titel: Bauteile finden Antworten mit Zitat

Hallo Nicola,

das ist ein echt interessantes Projekt.
Was mir bei dem Code spontan auffällt ist die Lichtwert Variable. Der ADC ist 10Bit groß also ihm reicht eine Word Variable, Du hast sie als Integer definiert deshalb sind die Werte anders als erwartet geworden. Dann brauchst Du auch den Start ADC nur einmal ausführen d.h. z.B. direkt nach der ADC-Konfiguration, und nicht jedes mal mit der Abfrage der Sonnenautomatik_auf. Was noch fehlt ist die Aktivierung der internen PullUp's für die Taster um die Port-Zustände klar zu definieren.
Du schreibst:
Code:

Taster_tuer_auf Alias Pind.1
Config Taster_tuer_auf = Input                              'Tür AUF

...

Besser wäre:
Code:

Taster_tuer_auf Alias Pind.1
Config Taster_tuer_auf = Input                              'Tür AUF
Taster_tuer_auf = 1                                          'PullUp


Ansonsten wie gesagt ziemlich interessant und gute Idee.

Ach, da wäre noch was.
Ein Bekannte von mir hatte vor ein paar Jahren auch sowas gebaut, dass die Rollos automatisch nach Sonnenuntergang etc. schließen. Irgendwann im Sommer sassen wir gemütlich beim Bier bei uns im Garten bis es die Zeit war das die nach Hause wollten. Nun, die sind zu uns am Nachmittag über den Garten gekommen, d.h. kein Hausschlüssel dabei da bei denen die Terrasse doch offen stand. Tja, inzwischen hatte aber die Automatik abends die Rollos herunter gefahren als kein Zutritt mehr!
Der Schlüsseldienst war echt teuer! Wink

Gruß
Bonie
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tux77



Anmeldungsdatum: 23.05.2009
Beiträge: 14
Wohnort: Erding

BeitragVerfasst am: Mi 03.Jun 2009 21:40:50    Titel: Bauteile finden Antworten mit Zitat

Hallo Bonie99,

An das Problem habe ich gedacht, da ich einen Balkon im 2 OG habe war es kein Problem außen einen Taster für die Balkontür zu montieren.
Somit kann ich das Türrollo von außen hochfahren.
Die Taster liegen hardwareseitig auf GND, schalten tue ich mit 5V+.

So und das erweiterte Programm mit 2fach Messung, funktioniert aber nicht:
Code:
 $regfile = "m32def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100

'Variablen
Dim Tuer_motor_counter As Integer
Dim Fenster_motor_counter As Integer
Dim Sonnen_sensor_counter As Integer
Dim Mess_counter As Integer
Dim Lichtwert As Integer
Dim Rollo_status As Bit
Dim Mess_status As Byte

'Schalter
Taster_tuer_auf Alias Pind.1
Config Taster_tuer_auf = Input                              'Tür AUF

Taster_tuer_ab Alias Pind.0
Config Taster_tuer_ab = Input                               'Tür AB

Taster_gesamt_auf Alias Pinc.6
Config Taster_gesamt_auf = Input                            'Gesamt AUF

Taster_gesamt_ab Alias Pinc.5
Config Taster_gesamt_ab = Input                             'Gesamt AB

Taster_fenster_auf Alias Pinc.4
Config Taster_fenster_auf = Input                           'Fenster AUF

Taster_fenster_ab Alias Pinc.3
Config Taster_fenster_ab = Input                            'Fenster AB

Taster_fenster_stop Alias Pind.2
Config Taster_fenster_stop = Input                          'Fenster STOP

Taster_tuer_stop Alias Pind.3
Config Taster_tuer_stop = Input                             'Tuer STOP

'Motor
Motor_fenster_auf Alias Portd.7
Config Motor_fenster_auf = Output                           'Fenster AUF

Motor_fenster_ab Alias Portc.0
Config Motor_fenster_ab = Output                            'Fenster AB

Motor_tuer_auf Alias Portc.1
Config Motor_tuer_auf = Output                              'Tür AUF

Motor_tuer_ab Alias Portc.2
Config Motor_tuer_ab = Output                               'Tür AB

'Timer0 konfigurieren (15,2587890625 Überläufe/sec)
Config Timer0 = Timer , Prescale = 256
On Timer0 On_timer0
Enable Timer0

'ADC konfiguration
Config Adc = Single , Prescaler = Auto , Reference = Avcc



'Interrupts global einschalten
Enable Interrupts


'Hauptschleife
Do
   Debounce Taster_fenster_auf , 1 , Motor_fenster_auf_einschalten , Sub
   Debounce Taster_fenster_ab , 1 , Motor_fenster_ab_einschalten , Sub
   Debounce Taster_tuer_auf , 1 , Motor_tuer_auf_einschalten , Sub
   Debounce Taster_tuer_ab , 1 , Motor_tuer_ab_einschalten , Sub
   Debounce Taster_gesamt_auf , 1 , Gesamt_auf_einschalten , Sub
   Debounce Taster_gesamt_ab , 1 , Gesamt_ab_einschalten , Sub
   Debounce Taster_fenster_stop , 1 , Motor_fenster_stop , Sub
   Debounce Taster_tuer_stop , 1 , Motor_tuer_stop , Sub

   If Fenster_motor_counter = 0 Then
      Motor_fenster_auf = 0
      Motor_fenster_ab = 0
   End If
   If Tuer_motor_counter = 0 Then
      Motor_tuer_auf = 0
      Motor_tuer_ab = 0
   End If
   If Sonnen_sensor_counter = 0 And Rollo_status = 0 Then
      Gosub Messung_1
   End If
   If Sonnen_sensor_counter = 0 And Rollo_status = 1 Then
      Gosub Messung_3
   End If
   If Mess_counter = 0 And Mess_status = 1 Then
      Gosub Messung_2
   End If
   If Mess_counter = 0 And Mess_status = 3 Then
      Gosub Messung_4
   End If
Loop

End

'Timer0-Interrupt-Handler
On_timer0:
   If Tuer_motor_counter > 0 Then
      Decr Tuer_motor_counter
   End If
   If Fenster_motor_counter > 0 Then
      Decr Fenster_motor_counter
   End If
   If Sonnen_sensor_counter > 0 Then
      Decr Sonnen_sensor_counter
   End If
   If Mess_counter > 0 Then
      Decr Mess_counter
   End If
Return


'Motor einschalten
Motor_fenster_auf_einschalten:
   Motor_fenster_ab = 0
   Waitms 200
   Motor_fenster_auf = 1
   Fenster_motor_counter = 610                              ' ca. 40 sec.
Return

Motor_fenster_ab_einschalten:
   Motor_fenster_auf = 0
   Waitms 200
   Motor_fenster_ab = 1
   Fenster_motor_counter = 610                              ' ca. 40 sec.
Return

Motor_tuer_auf_einschalten:
   Motor_tuer_ab = 0
   Waitms 200
   Motor_tuer_auf = 1
   Tuer_motor_counter = 687                                 ' ca. 45 sec.
Return

Motor_tuer_ab_einschalten:
   Motor_tuer_auf = 0
   Waitms 200
   Motor_tuer_ab = 1
   Tuer_motor_counter = 610                                 ' ca. 40 sec.
Return

Gesamt_auf_einschalten:
   Motor_fenster_ab = 0
   Motor_tuer_ab = 0
   Waitms 200
   Motor_fenster_auf = 1
   Motor_tuer_auf = 1
   Tuer_motor_counter = 610
   Fenster_motor_counter = 610
   Sonnen_sensor_counter = 27468                            ' ca. 1800 sec.
   Rollo_status = 0
Return

Gesamt_ab_einschalten:
   Motor_fenster_auf = 0
   Motor_tuer_auf = 0
   Waitms 200
   Motor_fenster_ab = 1
   Motor_tuer_ab = 1
   Tuer_motor_counter = 687
   Fenster_motor_counter = 610                              ' ca. 40 sec.
Return

Motor_fenster_stop:                                         'Fenster STOP
   Motor_fenster_auf = 0
   Motor_fenster_ab = 0
Return

Motor_tuer_stop:                                            'Tür STOP
   Motor_tuer_auf = 0
   Motor_tuer_ab = 0
Return

'Lichtwert überprüfen
Messung_1:
   Lichtwert = Getadc(0)
   Start Adc
   If Lichtwert > 700 And Mess_status = 0 Then
   Mess_status = 1
   Mess_counter = 30
   End If
   Stop Adc
   Reset Lichtwert
Return

Messung_3:
   Lichtwert = Getadc(0)
   Start Adc
   If Lichtwert < 660 And Mess_status = 2 Then
   Mess_status = 3
   Mess_counter = 30
   End If
   Stop Adc
   Reset Lichtwert
Return

'Sonnenautomatik ein
Messung_2:
   Lichtwert = Getadc(0)
   Start Adc
   If Lichtwert > 700 Then
   Motor_fenster_auf = 0
   Motor_tuer_auf = 0
   Waitms 200
   Motor_fenster_ab = 1
   Motor_tuer_ab = 1
   Tuer_motor_counter = 427                                 'ca. 28 sec.
   Fenster_motor_counter = 336                              'ca. 22 sec.
   Sonnen_sensor_counter = 27468
   Rollo_status = 1
   Mess_status = 2
   Else
   Mess_status = 0
   End If
Return

Messung_4:
   Lichtwert = Getadc(0)
   Start Adc
   If Lichtwert < 660 Then
   Motor_fenster_ab = 0
   Motor_tuer_ab = 0
   Waitms 200
   Motor_fenster_auf = 1
   Motor_tuer_auf = 1
   Tuer_motor_counter = 687
   Fenster_motor_counter = 610
   Sonnen_sensor_counter = 27468
   Rollo_status = 0
   Mess_status = 0
   Else
   Mess_status = 2
   End If
Return


Die Lichtwerte sind angepasst und Funktionieren so besser, in der alten Version. Jetzt reagiert er überhaupt nicht auf Lichtveränderung, sollte er theoretisch aber, ich kann mir das nicht erklären.

MfG
Nicola
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mi 03.Jun 2009 21:48:25    Titel: Bauteile finden Antworten mit Zitat

Tux77 hat folgendes geschrieben:
Jetzt reagiert er überhaupt nicht auf Lichtveränderung

Hallo Nicola!

Du musst den ADC nur einmal im Programm einschalten und nicht mehr ausschalten. Siehe Beispielcode: http://halvar.at/elektronik/kleiner_bascom_avr_kurs/adc_mit_getadc/

Du schaltest ihn immer wieder aus. So wird teilweise gar nicht erst gemessen. Die Variable "LICHTWERT" sollte ein WORD sein. Aber das hat Bonie beides im vorherigen Beitrag bereits geschrieben. Smile

mfg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Anzeige






Verfasst am: Heute 10:16:57    Titel: Bauteile finden

Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Microcontroller und DSP Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3 ... 17, 18, 19, 20  Weiter
Seite 18 von 20

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen


Powered by phpBB 2.x © 2001, 2002 phpBB Group

Sie sind Besucher Nr. 1220311
©opyright by Markus Vohburger 2005 All Rights reserved