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

Schwierigkeiten: erstes Programm/ADC,Interrupts, Arrays
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> BASCOM
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Caligula



Anmeldungsdatum: 21.11.2012
Beiträge: 14

BeitragVerfasst am: Fr 30.Nov 2012 19:00:38    Titel: Bauteile finden Antworten mit Zitat

Hallo,

hab die USB-UART-Bridge richtig anschließen können. Klappt alles super!

Jetzt habe ich noch eine Frage laut dem Datenblatt des Atmega32 (S.44) gibt es einen Inerrupt, der ausgelöst wird, sobald irgendwas empfangen wird. Wie kann ich auf diesen zugreifen? Der Interrupt nennt sich: UART Receive Complete.

Das funktioniert nicht:
Code:
On Rxc On_empfangen                                 'Interrupt um Messung zu beginnen
Enable Rxc
...............
...............
...............
...............
...............
...............
...............
On_empfangen:                                               'Messung ein/ausschalten
Toggle Status
Toggle Portc.0
Zeit = 0
Impulse = 0
Timer1 = 0
Return


Schönes Wochenende!

Caligula

_________________
Gruß

Caligula

Mein "Jugend forscht"-Projekt: http://co2collector.cwsurf.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sam



Anmeldungsdatum: 13.10.2008
Beiträge: 401

BeitragVerfasst am: Sa 01.Dez 2012 01:48:55    Titel: Bauteile finden Antworten mit Zitat

"Enable Interrupts" könnte eventuell helfen Smile
_________________
„Zwei Dinge sind unendlich, das Universum und
die menschliche Dummheit, aber bei dem
Universum bin ich mir noch nicht ganz sicher.“
Albert Einstein
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Caligula



Anmeldungsdatum: 21.11.2012
Beiträge: 14

BeitragVerfasst am: Sa 01.Dez 2012 15:23:29    Titel: Bauteile finden Antworten mit Zitat

Interrupts habe ich enabled.
_________________
Gruß

Caligula

Mein "Jugend forscht"-Projekt: http://co2collector.cwsurf.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sam



Anmeldungsdatum: 13.10.2008
Beiträge: 401

BeitragVerfasst am: Sa 01.Dez 2012 15:41:41    Titel: Bauteile finden Antworten mit Zitat

Ok, gut, dann ersetze mal RXC durch URXC
_________________
„Zwei Dinge sind unendlich, das Universum und
die menschliche Dummheit, aber bei dem
Universum bin ich mir noch nicht ganz sicher.“
Albert Einstein
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Caligula



Anmeldungsdatum: 21.11.2012
Beiträge: 14

BeitragVerfasst am: Do 06.Dez 2012 17:42:47    Titel: Bauteile finden Antworten mit Zitat

Hallo,

so den URXC akzeptiert der Compiler, aber wie löse ich den jetzt aus? Müsste doch über Putty gehen oder? Einfach tippen? Der Interrupt wird nicht ausgelöst.

Gruß

Caligula

Meine Firmware sieht mittlerweile so aus:



Code:
$regfile = "M32def.dat"                                     'es handelt sich um einen ATmega32
$crystal = 4915200                                          'der Quarz-Oszillator läuft mit 4,9152 Mhz
$hwstack = 100                                              'im Speicher werden für den Hardware-Stack 100 Byte reserviert
$swstack = 100                                              'im Speicher werden für den Software-Stack 100 Byte reserviert
$framesize = 100                                            'im Speicher werden für den Frame 1900 Byte reserviert
$baud = 9600

Ddra = &B00000000                                           'alle als Input-ADC
Ddrd = &B00000000                                           'PD2(Durchflusszähler); und PD3 -->Pullup einschalten
Ddrc = &B00000001                                           'hier ist eine LED angeschlossen deswegen Output

Portd.3 = 1                                                 'internen Pull Up aktivieren

Const Messzeit = 10                                         'Wie viele Sekunden soll gemessen werden?

Dim Impulse As Word                                         'Anzahl der Impulse seit Messungsbeginn, bis 2^16; Durchflussmesser: 10^4 Impulse pro Liter
Dim Status As Bit                                           'Messung an/aus
Dim Spannung(messzeit) As Word                              'Arrays
Dim Verbrauch(messzeit) As Byte                             'reicht aus, da kein 50ccm-Motor der Welt einen höheren Verbrauch innerhalb einer Sekunde haben wird ;D
Dim Zeit As Byte                                            'wird jede Sekunde um 1 hochgezählt
Dim I As Byte                                               'für Forschleife

Dim Tsp1 As Single
Dim Tsp2 As Single                                          ' von variablen unterschiedlicher wertigkeit
Const Adc_multi = 0.048828125                               ' = (5.0 / 1024.0) *10            'constante für umrechnung adc = ph-Wert(liegt zwischen 700 und 1400mV)

Von_vorn:

Status = 0                                                  'Initialisierungen
Portc.0 = 0
Zeit = 0

On Urxc On_empfangen                                        'Interrupt um Messung zu beginnen; sobald "irgendetwas" über UART empfangen wird
Enable Urxc

Config Timer1 = Timer , Prescale = 256                      'Timer einstellen: 19200 Signale für 1s

On Int1 On_int1                                             'Interrupt für Impulse
Config Int1 = Falling

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'für den ADC: AVCC Referenzspannung verwenden
Start Adc                                                   'ADC starten

Enable Interrupts                                           'Interrupts global einschalten. Das ist der Hauptschalter für alle Interrupts

Do

If Status = 1 Then                                          'Nur enabeln wenn die Messung begonnen werden soll
Enable Int1
End If                                                      'mainloop

If Timer1 = 19200 And Status = 1 Then
Disable Interrupts                                          'Interrupts ausschalten, dass der ADC nicht gestört wird/Einstellungen im Multiplexer könnten fatal manipuliert werden
Incr Zeit
Spannung(zeit) = Getadc(0)                                  'Spannung die an PC0 anliegt (Zahl zwischen 0 und 1024(=5V))
Verbrauch(zeit) = Impulse
Impulse = 0
Timer1 = 0
Enable Interrupts
End If

If Zeit >= Messzeit Then
Status = 0

Print "pH-Werte"
For I = 0 To Messzeit Step 1
Tsp1 = Spannung(i) * Adc_multi
Print Tsp1
Next I

Print "Verbrauch"
For I = 0 To Messzeit Step 1
Tsp2 = Verbrauch(i) / 10000                                 'in ml, da 10 000 Impulse pro l
Print Tsp2
Next I

Portc.0 = 1                                                 'LED für Anzeige Datenübetragung (blinkend)
Waitms 400
Portc.0 = 0
Waitms 400
Print "Datensatz wurde übermittelt."
Wait 3                                                      'periodisch senden

If Status = 1 Then
Goto Von_vorn
End If

End If

Loop                                                        'mainloop

End                                                         'Ende des Programms

On_empfangen:                                               'Messung ein/ausschalten
Toggle Status
Toggle Portc.0
Zeit = 0
Impulse = 0
Timer1 = 0
Return

On_int1:                                                    'ein Impuls registriert
Incr Impulse
Return

_________________
Gruß

Caligula

Mein "Jugend forscht"-Projekt: http://co2collector.cwsurf.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Caligula



Anmeldungsdatum: 21.11.2012
Beiträge: 14

BeitragVerfasst am: Do 06.Dez 2012 22:04:17    Titel: Bauteile finden Antworten mit Zitat

Guten Abend,
ich habe noch eine Frage: Kann ich mit einem Mikrocontroller ein sauberes nicht prellendes Signal emulieren? So zum Beispiel?

Gruß

Caligula

Code:

$regfile = "attiny13.dat"
$Crystal=4000000
$hwstack=20
$swstack=20
$framesize=20

Ddrb = &B00001000                                           'als output PB3


Do
Portb.3 = 1
Waitms 10
Portb.3 = 0
Waitms 234
Loop

End

_________________
Gruß

Caligula

Mein "Jugend forscht"-Projekt: http://co2collector.cwsurf.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Anzeige






Verfasst am: Heute 17:11:20    Titel: Bauteile finden

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

 
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. 1199458
©opyright by Markus Vohburger 2005 All Rights reserved